PHP in Widgets

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • PHP Code ist von Haus aus in Widgets nicht erlaubt.

    [size=10]Bitte immer zuerst die Forensuche nutzen und erst danach Deine Fragen hier im Forum stellen, denn sehr vieles wurde schon mehrfach beantwortet. Bitte dabei auch die Forenregeln beachten.
    Kein Support per PN - Fragen gehören ins Forum.[/SIZE]
    [size=8]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/SIZE]

  • Hallo Maxe!

    Das weiß ich im Prinzip.

    Aber auf einer Test-Installation wird folgender Code problemlos ausgeführt:

    PHP
    <?php tp_show_blogroll_rss_links( array('show_items' => 3,
                     'category' => false, 'item_order' => 'rand()', 
                   'older_than' => 72,
                    'show_date' => 1,
                    'show_image' => 'create-thumbnails',
                    'thumb_size' => 70,
                'show_summary' => 3,
                    'summary_length' => 100) ); ?>
               <a href="https://themenfreund.de/blogroll-2" title="Weitere Blogroll-Eintr&auml;ge">Weitere Eintr&auml;ge</a>
  • Zitat

    PHP Code Widget - Getestet bis: 4.7.8


    Sollte man mit Vorsicht geniessen, aktuell ist WordPress 4.9.x, mit veränderten HTML/Text-Widgets seit WordPress 4.8.x

    Eine bessere Lösung wäre wohl ein Shortcode, der seit WordPress 4.9.x ohne weitere Anpassungen in den Widgets ausgeführt wird.

    Einmal editiert, zuletzt von b3317133 (9. Dezember 2017 um 14:28)

  • Frage hat sich erledigt, habe folgende Funktion als hinzugefügten Code aktiviert

    Code
    function php_execute($html){if(strpos($html,"<"."?php")!==false){ ob_start(); eval("?".">".$html);
    $html=ob_get_contents();
    ob_end_clean();
    }
    return $html;
    }
    add_filter('widget_text','php_execute',100);
  • Frage hat sich erledigt, habe folgende Funktion als hinzugefügten Code aktiviert

    Code
    function php_execute($html){if(strpos($html,"<"."?php")!==false){ ob_start(); eval("?".">".$html);
    $html=ob_get_contents();
    ob_end_clean();
    }
    return $html;
    }
    add_filter('widget_text','php_execute',100);

    Ich hoffe, du weißt, was du da tust. Theoretisch baust du dir damit eine nicht zu unterschätzende Sicherheitslücke ein. Das *muss* kein Problem sein. Aber du solltest genau verstanden haben, was du da "aktiviert" hast. Zu beachten dabei ist vor allem auch folgender Hinweis zum Hook aus dem Codex:

    Zitat


    May also apply to some third party widgets as well.

    Die Shortcode-Variante von b3317133 ist in jedem Fall vorzuziehen.

  • Danke für den Hinweis!

    Meine Freude war wohl auch etwas voreilig, denn es erscheint wieder nur die Ausgabe des Codes.

    Nun zum Shortcode:

    Wie arbeite ich diesen Code

    Code
    <ol> 	<li style="list-style-type: none;">
    <div class="new-article"><strong><a title="&lt;?php the_title(); ?&gt;" href="&lt;?php the_permalink() ?&gt;" rel="bookmark"><!--?php if (strlen($post-&gt;post_title) &gt; 20) {&lt;br ?--> echo substr(the_title($before = '', $after = '', FALSE), 0, 30) . '...'; } else {
    the_title();
    } ?&gt;</a></strong></div>
    &nbsp;</li>
    </ol>

    denn in einen Shortcode um? Das hab ich noch nicht kapiert

  • Man nimmt das Beispiel von der Shortcode Dokumentation und setzt den (etwas korrigierten) Code dazwischen, z.B. so:


    Wobei zu beachten ist, dass je nach Position des Widgets und Seiten-Typ [FONT=courier new]$post[/FONT] einen anderen Bezug/Inhalt haben kann. Der Code zeigt nur das Prinzip auf...

    Einmal editiert, zuletzt von b3317133 (9. Dezember 2017 um 19:03)

  • Danke soweit schon mal.

    Nun habe ich noch ein anderes Problem mit den Widgets:

    Wenn ich die Seite mit dem offenen Widget per F5 aktualisiere, verschwindet der Code, und es erscheint ein '&nbsp;' (ohne die ' natürlich)


    Beispiel: Aus

    PHP
    <?php echo top_commentators_monat(); ?>                <h3 class="sidebar-title4">Top Kommentatoren der letzten 365 Tage:</h3>
                    <?php echo top_commentators_jahr(); ?>

    wird nach dem F5

    Code
    &nbsp;
    <h5 class="sidebar-title4">Top Kommentatoren letzte 365 Tage:</h5>
    &nbsp;

    Hat das schon mal jemand gehabt?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!