Eroare WP_Widget depreciat în WordPress V4.3

19 aug. 2015, 17:25:07
Vizualizări: 14.4K
Voturi: 5

Această eroare a apărut în această dimineață după ce am actualizat site-ul meu WordPress la versiunea 4.3. Alte două site-uri pe același hosting (toate folosind CPanel ca portal de administrare) nu au nicio problemă. Însă pe acest site problematic company.com, atât în panoul de administrare WordPress cât și pe site-ul live, apare o eroare care se repetă de mai multe ori în partea de sus a paginii:

Eroarea continuă în josul paginii de aproximativ 9 ori.

Pagina de eroare se încheie cu această linie/eroare.

Am citit despre această problemă astăzi și pare să fie legată de actualizarea de la PHP4 la PHP5, deși celelalte site-uri WordPress de pe același server nu au probleme. De asemenea, am dezactivat toate plugin-urile de pe site pentru a testa, dar problema a persistat. În afară de restaurarea din backup (care nu este ușor de făcut și poate provoca alte erori), mai este cineva care a întâmpinat această problemă recent?

Nu ajută faptul că mesajul de eroare pare să sugereze o soluție înainte de a fi tăiat la sfârșit cu

Folosiți...". Mesajul de eroare începe cu "company/public_html/wp-includes/ ...". A doua linie este "metoda constructor pentru WP_Widget este depreciată începând cu versiunea 4.3.0.

Versiunea 4.3 este versiunea la care WordPress a fost actualizat astăzi. Se pare că a cauzat această eroare, dar nu știu cum să o remediez.

Dacă aveți nevoie de alte informații pentru a răspunde, voi fi bucuros să le furnizez.

3
Comentarii

Nu ajută faptul că mesajul de eroare pare să sugereze o soluție înainte de a fi tăiat la sfârșit -- Dacă folosești View Source pe pagină, poți citi întregul mesaj de eroare?

Pat J Pat J
19 aug. 2015 18:20:13

Se pare că eroarea nu este de fapt tăiată, postarea a fost actualizată cu o imagine mai precisă a erorii. Am văzut acel articol. Există vreo metodă în CPanel/WP/Hosting pentru a vedea ce versiune de PHP este folosită, deoarece 'PHP Configuration' în CPanel nu pare să o afișeze.

MuccyCork MuccyCork
20 aug. 2015 12:43:06
Toate răspunsurile la întrebare 6
2

Eroarea nu este de fapt cauzată de versiunea ta de PHP (constructorii PHP 4 nu vor fi eliminați până la PHP 7) - este un avertisment generat de WordPress în pregătire pentru această schimbare. Fiecare repetare a erorii reprezintă un plugin care utilizează codul învechit.

Până când autorii plugin-urilor tale le vor actualiza, poți rula următoarea comandă shell pe un sistem Linux pentru a găsi apelurile vechi ale constructorilor:

grep -R "WP_Widget\(" /calea/catre/instalarea/wp

Aceasta va genera o listă de fișiere pe care le poți modifica fie din linia de comandă, fie folosind editorul de plugin-uri din WordPress. Șirurile găsite - în mare parte parent::WP_Widget(args) ar trebui schimbate în parent::__construct(args).

20 aug. 2015 04:10:18
Comentarii

Acest lucru nu este negat de faptul că am dezactivat toate pluginurile și tot am primit aceleași erori?

MuccyCork MuccyCork
20 aug. 2015 12:34:23

@MuccyCork codul învechit ar putea face parte din tema ta - comanda grep îl va găsi oriunde ar fi. Ține cont că va găsi potriviri și în pluginuri și teme care nu sunt active, caz în care poți ignora acele fișiere.

tjbp tjbp
20 aug. 2015 13:00:19
0

WordPress vă avertizează că această construcție este depreciată, deoarece se pregătește pentru PHP7. Ar trebui să verificați codul personalizat și orice plugin-uri pentru utilizarea construcției WP_Widget. Există (încă) multe plugin-uri care trebuie să-și actualizeze codul.

Iată o listă de plugin-uri care folosesc construcția depreciată WP_Widget: https://gist.github.com/chriscct7/d7d077afb01011b1839d

Puteți fie să așteptați ca autorii plugin-urilor să-și actualizeze codul, fie să modificați temporar codul plugin-urilor singur. Există un rezumat bun despre modificarea codului (de Chris Christoff)

Practic, în loc să faceți aceste lucruri:

  • {classname}::{classname}() ca în WP_Widget::WP_Widget() sau
  • parent::{classname}() ca în parent::WP_Widget() sau
  • {object}->{classname}() ca în {object}->WP_Widget() (un exemplu mai specific: $this->WP_Widget())

Faceți:

  • parent::__construct() pentru a apela constructorul clasei părinte dintr-o clasă copil
  • $var = new {class name}() ca în $var = new My_Widget_Class() pentru a deține o instanță a unui widget (nu utilizați My_Widget_Class ca nume al clasei widget-ului, ci ceva mai unic și aplicabil pentru a evita conflictele de nume de clase cu alte plugin-uri.
31 aug. 2015 17:49:01
0

Se pare că nu WP_Widget este cel care este actualizat, ci modul în care este referențiat.

Cred că ceea ce dorim este să trecem de la aceasta:

class mZ_Mindbody_day_schedule extends WP_Widget {

        function mZ_Mindbody_day_schedule() {
                $widget_ops = array(
                        'classname' => 'mZ_Mindbody_day_schedule_class',
                        'description' => __('Afișează programul claselor pentru ziua curentă.', 'mz-mindbody-api')
                        );
                $this->WP_Widget('mZ_Mindbody_day_schedule', __('Programul MindBody pentru astăzi', 'mz-mindbody-api'),
                                                        $widget_ops );
        } 

La aceasta:

class mZ_Mindbody_day_schedule extends WP_Widget {

        function mZ_Mindbody_day_schedule() {
                $widget_ops = array(
                        'classname' => 'mZ_Mindbody_day_schedule_class',
                        'description' => __('Afișează programul claselor pentru ziua curentă.', 'mz-mindbody-api')
                        );
                parent::__construct('mZ_Mindbody_day_schedule', __('Programul MindBody pentru astăzi', 'mz-mindbody-api'),
                                                        $widget_ops );
        } 

Unde doar linia șase din codul de mai sus este actualizată.

25 sept. 2015 00:12:23
2

Dacă dorești să păstrezi WP_DEBUG activat, dar să ascunzi acest tip specific de eroare, adaugă în fișierul functions.php al temei tale următoarea linie:

add_filter('deprecated_constructor_trigger_error', '__return_false');

Aceasta va preveni afișarea acestui tip de eroare.

Sper că te ajută :)

28 aug. 2015 00:16:50
Comentarii

Încă se evită rezolvarea problemei?

MuccyCork MuccyCork
31 aug. 2015 19:41:41

Prefer să las dezvoltatorii de plugin-uri să rezolve problema reală: nu este o eroare, doar o notificare pentru a le aminti LOR să o repare :)

Lorenzo Zottar Lorenzo Zottar
1 sept. 2015 03:23:50
1

Am fost într-o situație similară (a trebuit să repar mai întâi niște widget-uri personalizate într-o temă), dar mesajul a rămas chiar și după remedierea lor.

Am trecut la o temă implicită: tot aveam aceeași eroare.

Pe scurt: Am început să dezactivez plugin-urile unul câte unul... am descoperit că https://ro.wordpress.org/plugins/list-category-posts/ era de vină.

19 aug. 2015 22:24:19
Comentarii

Metodă bună, dar am dezactivat toate plugin-urile și încă primesc aceeași eroare. Dacă ar exista o modalitate de a dezactiva widget-urile și de a le activa la fel de ușor cum se poate face cu plugin-urile, atunci acest lucru ar face depanarea mult mai ușoară.

MuccyCork MuccyCork
20 aug. 2015 12:31:58
1
-1

Modul de depanare Wordpress poate produce aceste tipuri de mesaje.

Am avut aceeași problemă pe unul dintre site-urile mele.

Probabil ai această linie de cod în fișierul wp-config.php:

define('WP_DEBUG', true);

Încearcă să o modifici în:

define('WP_DEBUG', false);

Sper să te ajute.

27 aug. 2015 14:47:26
Comentarii

Asta va ascunde doar bug-ul. Debug-ul este acolo pentru un motiv. Ar trebui să corectezi mereu un bug și nu doar să-l ascunzi, un bug rămâne un bug, ascuns sau nu

Pieter Goosen Pieter Goosen
27 aug. 2015 15:03:42