it-swarm.com.de

WP_Widget veralteter Fehler in Wordpress V4.3

Dieser Fehler ist erst heute Morgen aufgetreten, als ich meine WordPress-Site auf Version 4.3 aktualisiert habe. Zwei andere Sites auf demselben Hosting (und alle, die CPanel als Administratorportal für das Hosting verwenden) haben keine Probleme. Auf dieser problematischen Site company.com im WordPress-Administrationsportal und auf der Live-Site tritt jedoch ein Fehler auf, der mehrmals oben auf der Seite wiederholt wird:

 The error continues down the page like this 9 times. 

 The error page is then finished off with this error/line. 

Ich habe dies heute nachgelesen und es hat vielleicht etwas mit dem Upgrade von PHP4 auf PHP5 zu tun, obwohl es kein Problem mit den anderen WP Sites auf demselben Server gibt. Ich habe auch alle Plugins auf der Site zum Testen deaktiviert und das Problem war immer noch da. Abgesehen von der Wiederherstellung von einem Backup (was nicht einfach ist und eigene Fehler verursachen kann), gibt es noch jemanden, der dieses Problem heute/in letzter Zeit hat?

Es hilft nicht, dass die Fehlermeldung eine Lösung selbst vorschlägt, bevor sie am Ende mit abgeschnitten wird

Verwenden Sie ... ". Die Fehlermeldung beginnt mit" company/public_html/wp-includes/... ". Die zweite Zeile lautet" Konstruktormethode für WP_Widget ist veraltet seit Version 4.3.0.

Version 4.3 ist die Version, auf die WP heute aktualisiert wurde. Es hat anscheinend diesen Fehler verursacht, aber ich weiß nicht, wie ich ihn beheben soll.

Für weitere Informationen stehe ich Ihnen gerne zur Verfügung.

2
MuccyCork

Der Fehler wird nicht durch Ihre PHP-Version verursacht (PHP 4-Konstruktoren werden erst nach PHP 7 entfernt) - dies ist eine Warnung, die von WordPress in Vorbereitung darauf erstellt wurde. Jede Wiederholung des Fehlers stellt ein Plugin dar, das den veralteten Code verwendet.

Bis die Autoren Ihrer Plugins sie aktualisieren, können Sie auf einem Linux-System den folgenden Shell-Befehl ausführen, um die alten Konstruktoraufrufe zu finden:

grep -R "WP_Widget\(" /path/to/your/wp/install

Dadurch erhalten Sie eine Liste der Dateien, die Sie entweder in der Befehlszeile ändern oder den Plug-in-Editor von WP verwenden können. Übereinstimmende Zeichenfolgen - meistens sollte parent::WP_Widget(args) in parent::__construct(args) geändert werden.

4
tjbp

Es scheint, dass nicht der WP_Widget aktualisiert wird, sondern die Art und Weise, wie darauf verwiesen wird.

Ich glaube, was wir wollen, ist, davon auszugehen:

class mZ_Mindbody_day_schedule extends WP_Widget {

        function mZ_Mindbody_day_schedule() {
                $widget_ops = array(
                        'classname' => 'mZ_Mindbody_day_schedule_class',
                        'description' => __('Display class schedule for current day.', 'mz-mindbody-api')
                        );
                $this->WP_Widget('mZ_Mindbody_day_schedule', __('Today\'s MindBody Schedule', 'mz-mindbody-api'),
                                                        $widget_ops );
        } 

Dazu:

class mZ_Mindbody_day_schedule extends WP_Widget {

        function mZ_Mindbody_day_schedule() {
                $widget_ops = array(
                        'classname' => 'mZ_Mindbody_day_schedule_class',
                        'description' => __('Display class schedule for current day.', 'mz-mindbody-api')
                        );
                parent::__construct('mZ_Mindbody_day_schedule', __('Today\'s MindBody Schedule', 'mz-mindbody-api'),
                                                        $widget_ops );
        } 

Wobei nur Zeile sechs des obigen Codes aktualisiert wird.

3
MikeiLL

WordPress macht Sie darauf aufmerksam, dass dieses Konstrukt veraltet ist, da es sich auf PHP7 vorbereitet. Sie sollten Ihren benutzerdefinierten Code und alle Plug-Ins auf die Verwendung des WP_Widget-Konstrukts überprüfen. Es gibt (noch) viele Plug-Ins, die ihren Code aktualisieren müssen.

Hier ist eine Liste von Plug-Ins, die das veraltete WP_Widget-Konstrukt verwenden: https://Gist.github.com/chriscct7/d7d077afb01011b1839d

Sie können entweder warten, bis die Plug-In-Autoren ihren Code aktualisiert haben, oder Sie können den Code der Plug-Ins (vorübergehend) selbst ändern. Es gibt eine gute Zusammenfassung über das Ändern Ihres Codes (von Chris Christoff )

Grundsätzlich, anstatt dies zu tun:

  • {classname}::{classname}() wie in WP_Widget::WP_Widget() oder
  • parent::{classname}() wie in parent::WP_Widget() oder
  • {object}->{classname}() wie in {object}->WP_Widget() (ein genaueres Beispiel: $this->WP_Widget())

Tun:

  • parent::__construct() zum Aufrufen des übergeordneten Klassenkonstruktors aus einer untergeordneten Klasse
  • $var = new {class name}() wie in $var = new My_Widget_Class(), um eine Instanz eines Widgets zu speichern (verwenden Sie jedoch My_Widget_Class nicht als Namen Ihrer Widget-Klasse, sondern verwenden Sie etwas Einzigartigeres und Anwendbares, um Konflikte zwischen Klassennamen und anderen Plugins zu vermeiden.
2

Wenn Sie WP_DEBUG aktiviert lassen und diese Art von Fehler ausblenden möchten, geben Sie in Ihrer theme functions.php folgende Zeile ein:

add_filter('deprecated_constructor_trigger_error', '__return_false');

Dies verhindert, dass diese Art von Fehler angezeigt wird.

Ich hoffe, es hilft :)

1
Lorenzo Zottar

Ich befand mich in einem ähnlichen Boot (musste zuerst einige benutzerdefinierte Widgets in einem Thema reparieren), hatte aber die Nachricht auch, nachdem ich sie repariert hatte.

Zu einem Standarddesign gewechselt: hatte immer noch den gleichen Fehler.

TL; DR : Plugins wurden nacheinander deaktiviert ... gefunden https://wordpress.org/plugins/list-category-posts/ war der Täter.

0
bishless