Erro preterido de WP_Widget no Wordpress V4.3

Este erro só aconteceu esta manhã, como eu atualizei o meu site wordpress para a versão 4.3. Dois outros sites na mesma hospedagem (e todos usando o CPanel como um portal de administração para a hospedagem) não estão tendo nenhum problema. Neste site problemático company.com, embora no portal de administração do wordpress e no site ao vivo, há um erro repetido várias vezes na parte superior da página, ou seja:

The error continues down the page like this 9 times.

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

Eu tenho lido hoje sobre isso e é talvez fazer com a atualização do PHP4 para PHP5, embora não haja nenhum problema com os outros sites do WP no mesmo servidor. Eu também desativei todos os plugins no site para testar e o problema ainda estava lá. Curta de restaurar a partir de um backup (que não é fácil de fazer e pode causar erros por si próprio) há mais alguém com esse problema hoje/recentemente?

Não ajuda que a mensagem de erro pareça sugerir uma solução antes de ser cortada no final com

Use ... ". A mensagem de erro começa" company/public_html/wp-includes/... ". A segunda linha é" método construtor para WP_Widget está obsoleto desde a versão 4.3.0.

A versão 4.3 é a versão que o WP foi atualizado até hoje. Aparentemente causou este erro, mas eu não sei como consertá-lo.

Qualquer outra informação necessária para responder a esta pergunta será mais do que feliz em fornecer.

2
adicionado o autor lsalamon, fonte
Não ajuda que a mensagem de erro pareça sugerir uma solução antes de ser cortada no final - Se você Ver código da página, consegue ler o mensagem de erro completa?
adicionado o autor Arien, fonte
O erro realmente não corta aparece, poste atualizado com imagem de erro mais precisa. Eu vi esse artigo. Existe uma maneira no CPanel/WP/Hosting para ver qual versão do PHP está sendo usada porque o 'PHP Configuration' no CPanel não parece mostrá-lo.
adicionado o autor Michael Fritzsche, fonte

6 Respostas

O erro não é realmente causado por sua versão do PHP (construtores do PHP 4 não serão removidos até o PHP 7) - é um aviso produzido pelo WordPress em preparação para isso. Cada repetição do erro representa um plugin usando o código desatualizado.

Até que os autores dos seus plugins os atualizem, você pode executar o seguinte comando shell em um sistema Linux para encontrar as chamadas antigas do construtor:

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

Isto lhe dará uma lista de arquivos que você pode modificar na linha de comando ou usar o editor de plugins do WP. Strings correspondentes - principalmente parent :: WP_Widget (args) devem ser alteradas para parent :: __ construct (args) .

4
adicionado
@MuccyCork o código obsoleto pode fazer parte do seu tema - o comando grep irá encontrá-lo onde quer que esteja. Tenha em mente que ele corresponderá a plug-ins e temas que não estão ativos. Nesse caso, você pode ignorar esses arquivos.
adicionado o autor David Archer, fonte
Isso não é negado pelo fato de que eu desativei todos os plugins e ainda recebi os mesmos erros?
adicionado o autor Michael Fritzsche, fonte

Parece que não é o WP_Widget que está sendo atualizado, mas a maneira como ele é referenciado.

Eu acredito que o que nós queremos é ir disto:

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 );
        } 

Para isso:

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 );
        } 

Onde é apenas a linha seis do código acima que é atualizado.

2
adicionado

O WordPress está lhe dando um aviso de que esta construção está obsoleta, porque está se preparando para o PHP7. Você deve verificar seu código customizado e quaisquer plug-ins para o uso da construção WP_Widget. Existem (ainda) muitos plug-ins que precisam atualizar seu código.

Here is a list of plug-ins that use the deprecated WP_Widget construct: https://gist.github.com/chriscct7/d7d077afb01011b1839d

Você pode esperar que os autores de plug-ins atualizem seu código ou você mesmo pode alterar o código de plug-ins (temporariamente). Há um bom resumo sobre como alterar seu código (por Chris Christoff )

Basically instead of doing these:

  • {classname}::{classname}() as in WP_Widget::WP_Widget() or
  • parent::{classname}() as in parent::WP_Widget() or
  • {object}->{classname}() as in {object}->WP_Widget() (a more specific example: $this->WP_Widget())

Do:

  • parent::__construct() to call the parent class constructor from a child class
  • $var = new {class name}() as in $var = new My_Widget_Class() to hold an instance of a widget (don't use My_Widget_Class as the name of your widget class though, use something more unique and applicable to avoid class name conflicts with other plugins.
2
adicionado

Se você quiser manter o WP_DEBUG ligado e você quer esconder este tipo específico de erro, coloque em seu tema functions.php esta linha:

add_filter('deprecated_constructor_trigger_error', '__return_false');

Isso evitará que esse tipo de erro seja exibido.

Espero que ajude :)

1
adicionado
Isso ainda está evitando consertar o problema?
adicionado o autor Michael Fritzsche, fonte
Eu prefiro deixar os desenvolvedores de plugins para corrigir o problema real: não é um erro, apenas um aviso para lembrá-los para corrigi-lo :)
adicionado o autor may, fonte

O modo de depuração do Wordpress pode produzir esses tipos de mensagens.

Eu tive o mesmo problema em um dos meus sites.

Talvez você tenha esta linha de código no seu arquivo wp-config.php:

define('WP_DEBUG', true);

Tente alterá-lo para:

define('WP_DEBUG', false);

Espero que ajude.

1
adicionado
Isso só esconderá o bug. Depurar está lá por um motivo. Você deve sempre corrigir um bug e não simplesmente escondê-lo, um bug permanece um bug, escondido ou não
adicionado o autor Pieter Goosen, fonte

Eu estava em um barco semelhante (primeiro tinha que consertar alguns widgets personalizados em um tema), mas tinha a mensagem mesmo depois de corrigi-los.

Mudou para um tema padrão: ainda teve o mesmo erro.

TL;DR: Started deactivating plugins one-by-one... found https://wordpress.org/plugins/list-category-posts/ was the culprit.

0
adicionado
Bom método mas eu desativei todos os plugins e ainda recebi o mesmo erro. Se houvesse uma maneira de desativar widgets e ativá-los tão facilmente quanto você pode fazer com plugins, isso facilitaria muito a solução de problemas.
adicionado o autor Michael Fritzsche, fonte