Eroare WP_Widget depreciat în WordPress V4.3
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:
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.

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)
.

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

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 înWP_Widget::WP_Widget()
sauparent::{classname}()
ca înparent::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țiMy_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.

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ă.

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ă :)

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ă.

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.
