Error de WP_Widget obsoleto en WordPress 4.3 - Solución
Este error apareció esta mañana al actualizar mi sitio WordPress a la versión 4.3. Otros dos sitios en el mismo hosting (y todos usando CPanel como portal de administración) no tienen ningún problema. Pero en este sitio problemático company.com, tanto en el panel de administración como en el sitio en vivo, aparece un error que se repite varias veces en la parte superior de la página:
He investigado hoy sobre esto y parece estar relacionado con la actualización de PHP4 a PHP5, aunque los otros sitios WP en el mismo servidor no tienen problemas. También desactivé todos los plugins del sitio para probar y el problema persistía. Aparte de restaurar desde una copia de seguridad (que no es fácil y puede causar otros errores), ¿alguien más ha tenido este problema recientemente?
No ayuda que el mensaje de error parezca sugerir una solución antes de cortarse al final con:
Use...". El mensaje de error comienza "company/public_html/wp-includes/...". La segunda línea dice "el método constructor para WP_Widget está obsoleto desde la versión 4.3.0.
La versión 4.3 es a la que se actualizó WP hoy. Aparentemente causó este error pero no sé cómo solucionarlo.
Cualquier otra información necesaria para responder esto estaré encantado de proporcionarla.

El error no es causado realmente por tu versión de PHP (los constructores de PHP 4 no se eliminarán hasta PHP 7) - es una advertencia generada por WordPress en preparación para esto. Cada repetición del error representa un plugin que está utilizando el código obsoleto.
Hasta que los autores de tus plugins los actualicen, puedes ejecutar el siguiente comando de shell en un sistema Linux para encontrar las llamadas a los constructores antiguos:
grep -R "WP_Widget\(" /ruta/de/tu/instalacion/wp
Esto te dará una lista de archivos que puedes modificar desde la línea de comandos o usando el editor de plugins de WP. Las cadenas coincidentes - principalmente parent::WP_Widget(args)
deben cambiarse por parent::__construct(args)
.

¿Esto no se ve negado por el hecho de que desactivé todos los plugins y seguí obteniendo los mismos errores?

WordPress te está mostrando un aviso de que esta construcción está obsoleta, porque se está preparando para PHP7. Deberías revisar tu código personalizado y cualquier plugin que utilice el constructor WP_Widget. Todavía hay muchos plugins que necesitan actualizar su código.
Aquí hay una lista de plugins que usan el constructor WP_Widget obsoleto: https://gist.github.com/chriscct7/d7d077afb01011b1839d
Puedes esperar a que los autores de los plugins actualicen su código o puedes modificar temporalmente el código de los plugins tú mismo. Hay un buen resumen sobre cómo cambiar tu código (por Chris Christoff)
Básicamente, en lugar de hacer esto:
{classname}::{classname}()
como enWP_Widget::WP_Widget()
oparent::{classname}()
como enparent::WP_Widget()
o{object}->{classname}()
como en{object}->WP_Widget()
(un ejemplo más específico:$this->WP_Widget()
)Haz esto:
parent::__construct()
para llamar al constructor de la clase padre desde una clase hija$var = new {class name}()
como en$var = new My_Widget_Class()
para mantener una instancia de un widget (no usesMy_Widget_Class
como nombre para tu clase de widget, usa algo más único y aplicable para evitar conflictos de nombres de clase con otros plugins).

Parece que no es el WP_Widget
lo que se está actualizando, sino la forma en que se hace referencia a él.
Creo que lo que queremos es pasar de esto:
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 );
}
A esto:
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 );
}
Donde solo se actualiza la línea seis del código anterior.

Si deseas mantener WP_DEBUG activado pero ocultar este tipo específico de error, agrega esta línea en el functions.php de tu tema:
add_filter('deprecated_constructor_trigger_error', '__return_false');
Esto evitará que se muestre este tipo de error.
¡Espero que te ayude :)

Yo estaba en una situación similar (primero tuve que arreglar algunos widgets personalizados en un tema), pero seguía teniendo el mensaje incluso después de solucionarlos.
Cambié a un tema por defecto: seguía teniendo el mismo error.
En resumen: Empecé a desactivar los plugins uno por uno... descubrí que https://wordpress.org/plugins/list-category-posts/ era el culpable.

El modo de depuración de WordPress puede producir este tipo de mensajes.
Tuve el mismo problema en uno de mis sitios.
Quizás tengas esta línea de código en tu archivo wp-config.php:
define('WP_DEBUG', true);
Intenta cambiarlo por:
define('WP_DEBUG', false);
Espero que te ayude.
