Hinweis ist WordPress “WP_Scripts::localize wurde falsch aufgerufen”

Lesezeit: 6 Minuten

Vollständige Meldung: Hinweis: WP_Scripts::localize wurde falsch aufgerufen. Der $l10n-Parameter muss ein Array sein. Um beliebige Daten an Skripte zu übergeben, verwenden Sie stattdessen die Funktion wp_add_inline_script(). Weitere Informationen finden Sie unter Debuggen in WordPress. (Diese Nachricht wurde in Version 5.7.0 hinzugefügt.) in /home3/dduconne/public_html/wp-includes/functions.php in Zeile 5313

Erschien kurz nach dem Aktualisieren von WordPress auf 5.7.0

  • Ich habe gesehen, dass das Plugin WP Accessibility dieses Problem verursacht, aber ich bin mir sicher, dass es nicht das einzige ist. Wenn Sie neugierig sind, welches Ihrer Plugins es verursacht, deaktivieren Sie eines nach dem anderen, bis es verschwindet, dann wissen Sie, welches verantwortlich ist!

    – Tobybot

    15. März 2021 um 17:41 Uhr

Benutzeravatar von GhostPengy
GhostPengy

Ok, da es einige Ansichten gibt und die vorherige Antwort sie nur unter den Teppich wirft.

Ja, es ist jetzt eine Warnung, aber wer weiß, was passieren wird, es ist aus einem bestimmten Grund eine Warnung, etwas zu deaktivieren löst es nicht, es gibt einen Grund, warum Entwickler es vorerst als Warnung festlegen.

Während wir darauf warten, dass die Plugin-Entwickler das Problem ihrerseits beheben, können Sie die Ursache des Problems herausfinden, indem Sie es aktivieren php_xdebug in php. Ich empfehle, es nach dem Debuggen nicht zu verlassen, da ich mir nicht sicher bin, welche Leistungseinbußen durch die Aktivierung entstehen.

php_xdebug gibt einen Stapel aller betroffenen Dateien zurück, von dort aus können Sie die Ursache des Problems zurückverfolgen. Die Lösung, sobald die Quelle gefunden wurde, ist ziemlich einfach. Täter ist höchstwahrscheinlich wp_localize_script() was erfordert, dass der letzte Parameter an ist array()!

Sie würden also so etwas finden:

wp_localize_script( 'handle', 'object_name', 'l10n_culprit_string' );

Was umgewandelt werden soll in:

wp_localize_script( 'handle', 'object_name', array( 'l10n_culprit_string' ) );

Lösung des Problems kam von hier

  • Dies sollte die richtige Antwort sein. Vielen Dank!

    – Leo Gono

    9. Mai 2021 um 15:56 Uhr

  • Beachten Sie auch, dass die ursprüngliche Absicht dahinter steckt wp_localize_script behandelte übersetzbare Zeichenfolgen in js. Wir alle verwenden es seit Jahren als Hack, um globale Werte an Skripte zu übergeben, nicht nur übersetzbare Zeichenfolgen. Es kann immer noch so verwendet werden und es wird funktionieren, aber anscheinend ist es besser, es zu verwenden wp_add_inline_script jetzt stattdessen. Sehen developer.wordpress.org/reference/functions/…

    – Kandiszucker

    15. Dezember 2021 um 19:45 Uhr

Dies ist eine neue Warnung, die in WordPress 5.7 erscheint. Wenn du es nicht sehen möchtest und trotzdem WP_DEBUG auf true gesetzt haben möchtest, ist es möglich, die Nachricht zu deaktivieren, indem du zum Beispiel Folgendes in die functions.php deines Themes hinzufügst:

 add_filter('doing_it_wrong_trigger_error', function () {return false;}, 10, 0);

  • Das löst das Problem nicht, es wird nur unter den Teppich gekehrt.

    – Spencer Shattuck

    17. März 2021 um 20:18 Uhr

  • Vielen Dank. Hat vorerst funktioniert. Warten wir auf die echte Lösung von WP.

    – Thiago

    20. April 2021 um 18:59 Uhr

  • Sehr schlechter Rat und diese Antwort sollte NICHT AKZEPTIERT WERDEN. Es löst nichts.

    – kanlukasz

    29. April 2021 um 8:08 Uhr


  • Ich fordere diejenigen auf, die sich über meine Antwort beschweren, sich eine bessere auszudenken. NATÜRLICH löst meine Antwort das Problem nicht, da das Problem in einem oder mehreren der verwendeten Plugins liegt. Wenn Sie ein Plugin-Autor sind, müssen Sie natürlich das Problem beheben (was – ich betone – bisher unbemerkt blieb), indem Sie sicherstellen, dass der dritte Parameter von wp_localize_script ein Array ist. Aber wenn nicht, welche Möglichkeiten gibt es? Patchen der fehlerhaften Plugins? Keine nachhaltige Lösung (das wurde schon gemacht). WP_DEBUG auf false setzen? Viel schlimmer als meine Antwort, da nicht nur diese Warnung, sondern viele andere deaktiviert werden.

    – Christer Fernstrom

    30. April 2021 um 9:25 Uhr

  • Tatsächlich ist das “Problem” die endlose Liste von Fehlern, die unvermeidlich sind, weil WP nicht über die Ressourcen verfügt, um das Problem zu beheben. Ja, Plugins und Themes könnten in einigen Funktionen zu einem Fallback zurückkehren, aber dies LÖST das Vererbungs-„Problem“ nicht. Dennoch LÖST es das anfängliche Problem, sich den redundanten Fehlertext auf Ihrer Seite ansehen zu müssen; Wenn es praktisch ist, könnten Sie diesen Kopfraum für etwas Relevanteres nutzen, wie z. B. Fehler, die Sie beheben KÖNNEN. Ich habe die Antwort verbessert, da sie mir geholfen hat. Die Instanz, an der ich arbeitete, hatte viel zu viele Plugins, um die Fehlerquelle einzugrenzen.

    – Handelssüdwesten

    1. Mai 2021 um 21:44 Uhr


Es ist jetzt ein Hinweis, wenn Sie wp5.7 und php7.4 verwenden, aber wenn Sie zu php8 wechseln, wird dies möglicherweise als Fehler gemeldet. Als ich (in meinem eigenen Code) den übergebenen Wert in Array geändert habe (ja, wahrscheinlich waren auch einige Änderungen in den beteiligten js erforderlich), funktionierte alles einwandfrei.

  • Hallo @dominagy – das ist ein toller Kommentar und eine wichtige Info (dass es als Fehler gemeldet wird, wenn du zu PHP8 wechselst). Wahrscheinlich besser geeignet als Kommentar zu GhostPengys Antwort. Ich würde es als Kommentar unter dieser Antwort positiv bewerten.

    – Kandiszucker

    15. Dezember 2021 um 19:39 Uhr

Dies liegt daran, dass eines der PHP-Skripte in Ihrer WordPress-Installation wp_localize_script() verwendet, um einige PHP-Variablen über eine AJAX-Anforderung an ein JS-Skript zu übergeben, und dies keine gute Praxis mehr ist. Dies kann sich in einem Plugin oder in der functions.php Ihres benutzerdefinierten Designs oder untergeordneten Designs befinden. Wenn wp_localize_script() nicht in der functions.php eines untergeordneten Designs oder benutzerdefinierten Designs enthalten ist, versuchen Sie Folgendes:

  1. Sichern Sie Ihre Website
  2. alle Plugins deaktivieren
  3. Reaktivieren Sie sie nacheinander, bis Sie die Benachrichtigung erneut erhalten
  4. Wenn der Hinweis erneut angezeigt wird, bedeutet dies, dass das Plugin, das Sie gerade reaktiviert haben, wp_localize_script() auf die falsche Weise verwendet
  5. Wenn es nicht auf dem neuesten Stand ist, versuchen Sie es zu aktualisieren (wenn Sie möchten): Vielleicht verschwindet der Hinweis
  6. Wenn es bereits auf dem neuesten Stand ist oder Sie es nicht aktualisieren möchten, suchen Sie in wp-content/plugins im Ordner des entsprechenden Plugins
  7. Öffnen Sie es und versuchen Sie, die Datei(en) zu finden, in denen wp_localize_script() aufgerufen wird. Sie können auch CLI mit dem Terminal Ihres Servers verwenden, um Zeichenfolgen in Dateien zu finden. Wenn Ihr Server beispielsweise unter Linux läuft: grep -H -r “wp_localize_script()” /root/pathtopluginfolder | Schnitt -d: -f1
  8. Ersetzen Sie dann den Code wie folgt:

Der alte sollte ungefähr so ​​aussehen:

wp_enqueue_script( 'wpdocs-my-script', 'https://url-to/my-script.js' );
wp_localize_script( 'wpdocs-my-script', 'MYSCRIPT', array(
    'ajaxUrl' => admin_url( 'admin-ajax.php' ),
    'otherParam' => 'some value',
) );

Ein neues :

wp_enqueue_script( 'wpdocs-my-script', 'https://url-to/my-script.js' );
wp_add_inline_script( 'wpdocs-my-script', 'const MYSCRIPT = ' . json_encode( array(
    'ajaxUrl' => admin_url( 'admin-ajax.php' ),
    'otherParam' => 'some value',
) ), 'before' );

Beachten Sie, dass Sie „before“ als dritten Parameter zur Funktion wp_add_inline_script hinzufügen müssen.

Sobald dies erledigt ist, sollte der Hinweis nicht mehr angezeigt werden. Wenn dies der Fall ist, wenden Sie sich an den Plugin-Entwickler, um ihm dies mitzuteilen, damit es Teil des nächsten Updates sein kann.

Weitere Informationen finden Sie im Kommentar von Jules Colle auf dieser Seite: https://developer.wordpress.org/reference/functions/wp_add_inline_script/

1394990cookie-checkHinweis ist WordPress “WP_Scripts::localize wurde falsch aufgerufen”

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy