Errore WP_Widget deprecato in WordPress V4.3
Questo errore è apparso stamattina dopo aver aggiornato il mio sito WordPress alla versione 4.3. Altri due siti sullo stesso hosting (che utilizzano tutti CPanel come porta di amministrazione) non hanno alcun problema. Solo su questo sito problematico company.com, sia nel pannello di amministrazione WordPress che nel sito live, compare un errore che si ripete più volte in cima alla pagina:
Ho fatto delle ricerche oggi e sembra possa essere legato all'aggiornamento da PHP4 a PHP5, sebbene non ci siano problemi con gli altri siti WP sullo stesso server. Ho anche disabilitato tutti i plugin del sito per testare, ma il problema persisteva. A parte il ripristino da un backup (che non è semplice da fare e può causare errori a sua volta), c'è qualcun altro che ha avuto questo problema recentemente?
Non aiuta il fatto che il messaggio d'errore sembri suggerire una soluzione prima di essere troncato alla fine con
Use...". Il messaggio d'errore inizia con "company/public_html/wp-includes/...". La seconda riga è "constructor method for WP_Widget is deprecated since version 4.3.0.
La versione 4.3 è quella a cui WordPress è stato aggiornato oggi. Sembra aver causato questo errore ma non so come risolverlo.
Se servono altre informazioni per rispondere, sarò felice di fornirle.

L'errore non è effettivamente causato dalla tua versione di PHP (i costruttori PHP 4 non verranno rimossi fino a PHP 7) - è un avviso generato da WordPress in preparazione a questo cambiamento. Ogni ripetizione dell'errore rappresenta un plugin che utilizza il codice obsoleto.
Fino a quando gli autori dei tuoi plugin non li aggiorneranno, puoi eseguire il seguente comando shell su un sistema Linux per trovare le chiamate ai costruttori vecchi:
grep -R "WP_Widget\(" /percorso/della/tua/installazione/wp
Questo ti fornirà una lista di file che puoi modificare tramite la riga di comando o utilizzando l'editor di plugin di WP. Le stringhe trovate - principalmente parent::WP_Widget(args)
dovrebbero essere cambiate in parent::__construct(args)
.

Questo non è negato dal fatto che ho disattivato tutti i plugin e ho comunque ricevuto gli stessi errori?

WordPress ti sta notificando che questo costrutto è deprecato, perché si sta preparando per PHP7. Dovresti controllare il tuo codice personalizzato e qualsiasi plugin che utilizzi il costrutto WP_Widget. Ci sono (ancora) molti plugin che necessitano di aggiornare il loro codice.
Ecco una lista di plugin che utilizzano il costrutto deprecato WP_Widget: https://gist.github.com/chriscct7/d7d077afb01011b1839d
Puoi aspettare che gli autori dei plugin aggiornino il loro codice oppure puoi modificare temporaneamente tu stesso il codice dei plugin. C'è un buon riassunto su come modificare il tuo codice (di Chris Christoff)
In sostanza invece di fare queste operazioni:
{classname}::{classname}()
come inWP_Widget::WP_Widget()
oppureparent::{classname}()
come inparent::WP_Widget()
oppure{object}->{classname}()
come in{object}->WP_Widget()
(un esempio più specifico:$this->WP_Widget()
)Fai:
parent::__construct()
per chiamare il costruttore della classe genitore da una classe figlia$var = new {class name}()
come in$var = new My_Widget_Class()
per creare un'istanza di un widget (non usareMy_Widget_Class
come nome della tua classe widget, usa qualcosa di più unico e pertinente per evitare conflitti di nomi di classe con altri plugin.

Sembra che non sia WP_Widget
ad essere aggiornato, ma il modo in cui viene referenziato.
Credo che ciò che vogliamo sia passare da questo:
class mZ_Mindbody_day_schedule extends WP_Widget {
function mZ_Mindbody_day_schedule() {
$widget_ops = array(
'classname' => 'mZ_Mindbody_day_schedule_class',
'description' => __('Mostra l'orario delle lezioni per il giorno corrente.', 'mz-mindbody-api')
);
$this->WP_Widget('mZ_Mindbody_day_schedule', __('Orario MindBody di Oggi', 'mz-mindbody-api'),
$widget_ops );
}
A questo:
class mZ_Mindbody_day_schedule extends WP_Widget {
function mZ_Mindbody_day_schedule() {
$widget_ops = array(
'classname' => 'mZ_Mindbody_day_schedule_class',
'description' => __('Mostra l'orario delle lezioni per il giorno corrente.', 'mz-mindbody-api')
);
parent::__construct('mZ_Mindbody_day_schedule', __('Orario MindBody di Oggi', 'mz-mindbody-api'),
$widget_ops );
}
Dove è solo la sesta riga del codice sopra che viene aggiornata.

Se vuoi mantenere WP_DEBUG attivo ma desideri nascondere questo specifico tipo di errore, inserisci nel file functions.php del tuo tema questa riga:
add_filter('deprecated_constructor_trigger_error', '__return_false');
Questo impedirà la visualizzazione di questo tipo di errore.
Spero sia utile :)

Mi trovavo in una situazione simile (prima ho dovuto sistemare alcuni widget personalizzati in un tema), ma continuavo a ricevere il messaggio anche dopo averli corretti.
Ho cambiato con un tema predefinito: l'errore persisteva.
TL;DR: Ho iniziato a disattivare i plugin uno per uno... ho scoperto che https://wordpress.org/plugins/list-category-posts/ era il colpevole.

La modalità di debug di WordPress può generare questo tipo di messaggi.
Ho avuto lo stesso problema su uno dei miei siti.
Forse hai questa riga di codice nel tuo file wp-config.php:
define('WP_DEBUG', true);
Prova a cambiarla con:
define('WP_DEBUG', false);
Spero sia utile.
