• Gelöst onlaie

    (@onlaie)


    Kann es sein, dass sich seit WP 7.0 etwas bez. Shortcodes geändert hat?
    Seit der Umstellung zeigen sich die meisten eben nur so als [Code], statt den Inhalt auszugeben.
    Dies passiert bei allen selbstgeschriebenen Shortcode Funktionen (*) und bei den meisten Shortcodes, welche mit dem Plugin „Post Snippets“ angelegt wurden.

    *) Ein Beispiel eines, seit über 10 Jahren funktionierenden eigenen Shortcodes:

    add_shortcode('apaots', function () {
    
       $linktitel_ots = "blabla";
       $post_id = get_the_ID();
       $quellenlink = get_post_meta($post_id, 'apaots', true);
    
       return "<div>
                    <a href='" . esc_url($quellenlink) . "' target='_blank' rel='noopener noreferrer' title='" . esc_attr($quellenlink) . "'>Quelle</a><br />
                    <span>" . esc_html($linktitel_ots) . "</span>
                </div>";
    });

    Auch dieser gibt seit WP 7.0 nur mehr [apaots] aus …

Ansicht von 7 Antworten – 1 bis 7 (von insgesamt 7)
  • Deaktiviere doch einfach mal Plugins, dann auch mal Wechsel auf ein anderes Theme.
    Gibt es Fehlermeldungen in der developer console (Aufruf mit F12).

    Hilfreich könnte die Aktivierung des Debug-Modus sein. Damit Fehler ausgelesen werden können, müssen die Fehler in eine Log-Datei auf dem Server geschrieben werden, auf die man dann per FTP (oder auch SSH) zugreifen kann.
    Sichere bitte zunächst die wp-config.php auf deinem lokalen Rechner.
    Gib dann bitte mit einem geeigneten Programmier-Editor (z. B. Notepad++) in der wp-config.php oberhalb von /* That's all, stop editing! Happy blogging. */ folgendes ein:

    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_DISPLAY', false);
    define( 'WP_DEBUG_LOG', true );

    Achte darauf, dass du define('WP_DEBUG', false); überschreibst, falls die Zeile bereits in der wp-config.php steht. Wenn versucht wird, diese Konstante ein zweites mal zu definieren, gibt es einen Fehler, der deine Seite lahmlegen würde.
    Mit diesen drei Codezeilen sagen wir WordPress, dass der Debug-Modus aktiviert werden soll. Die Fehlermeldungen sollen aber nicht direkt angezeigt werden, sondern in die Datei /wp-content/debug.log geschrieben werden.
    Wenn der Fehler gefunden wurde bzw. wenn die Fehler nicht mehr in die debug.log geschrieben werden sollen, dann musst du daran denken, die Variable
    define( 'WP_DEBUG_LOG', true );
    wieder auf false zu setzen:
    define( 'WP_DEBUG_LOG', false);

    Evtl. hilft auch, wenn du unter Dashboard -> Aktualisierungen auf den Button „WordPress 7.0 erneut installieren“ klickst.

    Hilfreich für eine Analyse wäre der Website-Bericht:
    Du findest unter Werkzeuge > Website-Zustand > Info einen Bericht zur Website. Warte bitte einen Moment bis die Ladeanzeige ganz oben abgeschlossen ist und kopiere dann per Button den Website-Bericht in deine Zwischenablage. Über den Button „Bericht in die Zwischenablage kopieren“ kannst du den Bericht unverändert (bitte mit den Akzentzeichen am Anfang und Ende) einfügen und anschließend hier posten. Evtl. ergeben sich dann weitere Anhaltspunkte, ob und wo das Problem liegt.
    Hier ein Screenshot dazu (bei Klick auf das Bild, wird das Bild vergrößert):
    Website-Bericht

    Und mit z. B. STRG V in die Antwort bei diesem Thema einfügen.

    Mehr Infos zum Website-Zustand findest du z. B. in dem folgenden Video

    Thread-Starter onlaie

    (@onlaie)

    Alle DEBUG Aktionen, inkl. Plugins, Themes deaktivieren usw. brachten hier keine Änderung oder Erkenntnis.
    Ansonsten ich ja mit einer Fehlermeldung oder einem Bericht angekommen wäre.

    Doch das Problem ist eindeutig eine Veränderung bez. Shortcode Handling im WP ab 7.0.
    Googles KI redet davon, dass man jetzt die eigenen Shortcode-Funktionen registrieren sollte …
    Bevor ich das näher nachfrage, wollte ich halt wissen, was ab WP 7.0 geändert wurde.

    Ich habe den Shortcode von dir gerade mal auf einer Website in playground getestet, indem ich den Code von dir in die functions.php bei dem Standardtheme Twenty Twenty-Five eingefügt habe.

    Der Shortcode [apaots] wurde ohne Probleme ausgeführt.

    Das muss also andere Ursachen haben, daher was passiert bei Deaktivierung der Plugins, Wechsel auf ein anderes Theme, etc.

    Thread-Starter onlaie

    (@onlaie)

    Ja, innerhalb von Content gehts. Also Shortcodes mitten in Seiten, Beiträgen zeigen sich weiterhin.
    Aber irgendwas ist bei den (HTML)-Widgets passiert. Da tut sich nichts, die gaben nichts mehr aus.

    Daraufhin fand ich den Trick für die functions.php:

    add_filter('widget_text', 'do_shortcode');
    add_filter('widget_custom_html', 'do_shortcode', 10);

    und ja, seitdem gehts wieder.
    Mal sehen, ob auch wirklich alle Shortcodes aus allen Quellen zuverlässig erscheinen. Jedenfalls zeigen sich die selbst gebauten Ausgaben plötzlich wieder!

    Denke und hoffe, das war’s.

    Moderator threadi

    (@threadi)

    In WordPress 7.0 gab es keinerlei Änderungen hinsichtlich Shortcodes. Daher hab ich mir deinen Fall mal näher angeschaut.

    Anders als @hage habe ich es mal mit dem von dir genutzten Plugin Post Snippets versucht. Kenne das Plugin nicht weiter, aber habe mir mal die Optionen angeschaut. Bei jedem Code muss man auswählen um was es sich handelt. Ich weiß nicht wie du dort deinen Code hinterlegt hast und was für Optionen du gesetzt hast. Bei mir wird allerdings ebenfalls im Frontend nur der Shortcode ausgegeben, wenn ich den von dir genannten Code einfach nur so dort hinterlege und keinerlei Optionen angebe.

    Er wird allerdings normal interpretiert, sobald ich den Code auf einzig das hier ändere:

    $linktitel_ots = "blabla";
    $post_id = get_the_ID();
    $quellenlink = get_post_meta($post_id, 'apaots', true);

    echo "<div>
    <a href='" . esc_url($quellenlink) . "' target='_blank' rel='noopener noreferrer' title='" . esc_attr($quellenlink) . "'>Quelle</a><br />
    <span>" . esc_html($linktitel_ots) . "</span>
    </div>";

    und als Optionen

    • Shortcode
    • PHP Code

    anhake.

    Insgesamt finde ich das schon etwas merkwürdig, da Shortcodes kein echo zurückgeben sollten sondern ihre Ausgabe per return zurückgeben.

    Meine Vermutung ist daher gerade her, dass dieses Plugin die Interpretation der Shortcodes schon immer falsch macht. Dafür spricht auch, dass du erste diese 2 von dir genannten Hooks ergänzen musst damit sie interpretiert werden.

    Auch wenn du das Topic hier schon auf gelöst gesetzt hast, würde ich dir dennoch empfehlen (auch für diejenigen die das hier später nochmal lesen sollten):

    Thread-Starter onlaie

    (@onlaie)

    Post Snippets … Bei jedem Code muss man auswählen um was es sich handelt.

    Ja, stimmt. Ich nutze es schon sehr lange, auf mehreren Sites und bisher klappte damit alles. Natürlich musste man schon immer die richtige Option anhaken.
    Doch seit WP 7.0 nutzt das nichts mehr. (außer man hat eben die do_shortcode Filter f. Widgets aktiv)

    da Shortcodes kein echo zurückgeben sollten, sondern ihre Ausgabe per return zurückgeben.

    So verstand ich das auch …

    Bei mir geht aber (ab WP 7.0) gar nichts mehr. Also egal wie ich die Post Snippets Codes ändere – entweder kommt nichts oder wieder nur der [code].
    In Webs mit WP 6.x funzt das einwandfrei. Auch mit return - Wenn das (wie eingangs gezeigt) mit dem Funktionscode umschlossen ist.

    OT: Aber Post Snippets verwaltet hier nur eher untergeordnete Sachen.
    Alles, was wichtig ist, wo sich viele dynamisch generierte Daten zusammenfinden, ausgegeben werden sollen, dort sind es eigene Funktionen in der functions.php.
    (Das kleine Beispiel war stets auch nur in der functions.php. Und lief bisher perfekt.)

    In Post Snippets selbst sind nur wenige echte Shortcodes, PHP Codes.
    Es sind eher Textbausteine, welche die Autoren einfach irgendwo reinklicken können. (Post Snippets stellt ja einen Button im Editor zvg., wo man die Snippets wählen kann.)

    Somit ist es wichtiger, dass die eigenen Shortcodes aus der functions.php auch mit WP 7. tun, was sie sollen.
    Und das scheint nur mehr mittels

    add_filter('widget_text', 'do_shortcode');
    add_filter('widget_custom_html', 'do_shortcode', 10);

    zu klappen ...

    Moderator threadi

    (@threadi)

    Ich kann weiterhin kein Problem mit Shortcodes feststellen. Bei mir funktionieren die völlig egal wo man sie definiert (functions.php, eigenes Plugin ..) – außer wenn ich das Plugin „Post Snippets“ verwende. Dort geht es nur auf oben beschriebenen Weg. Ich würde daher nochmals empfehlen a) dein Projekt genau anzuschauen, welche Komponenten du verwendest, wenn es bei dir auch in der functions.php nicht geht und b) dich an den Support „Post Snippets“ zu wenden. Leider hast du mit deiner Frage keinen Website-Bericht bereitgestellt, weshalb man dazu auch nichts genaueres sagen kann.

Ansicht von 7 Antworten – 1 bis 7 (von insgesamt 7)

Du musst angemeldet sein, um auf dieses Thema zu antworten.