Como corrigir o erro “The called constructor method for WP_Widget is deprecated since version 4.3.0!” no WordPress

338 0

This post is also available in: English

Recentemente decidi actualizar um dos meus websites antigos, feito com WordPress. Entre os aspectos que estavam desactualizados, destaca-se o tema  que eu comprei á mais de 6 anos atrás, portanto numa versão muito antiga do WordPress.

Como mandam as boas práticas, activei o Debug Mode do WordPress para poder identificar qualquer incompatibilidade dos temas e plugins com a versão mais recente do WordPress, 5.6.2 neste caso. Ao recarregar a página inicial, uma série de erros do PHP apareceram, entre os quais o que dizia: “The called constructor method for WP_Widget is deprecated since version 4.3.0!”. 

Foi relativamente fácil descobrir a causa do err: Versões antigas do WordPress eram baseada em versões antigas do PHP, cujo suporte a Orientação á Objectos ainda não era o que conhecemos hoje. Portanto,  o WordPress adoptou uma prática de usar a função com o mesmo nome que a classe como constructor da classe. A solução: Substituir os antigos “pseudo-constructores”  do WordPress pela função nativa __construct do PHP. Assim sendo, todos Widgets que tem esta função:

 

class My_Widget extends WP_Widget {

    function My_Widget() {
        $widget_ops = array('classname' => 'my-widget', 'description' => 'My Widget description.');

        $control_ops = array('id_base' => 'my-widget');

        $this->WP_Widget('my-widget', 'My Widget', $widget_ops, $control_ops);
    }

    function widget($args, $instance) {

Devem ser substituidas para que o construtor seja:

class My_Widget extends WP_Widget {

    function __construct() {
        parent::__construct(
            'my-widget', // Base ID
            'My Widget', // Name
            array( 'description' => 'My Widget description.' ) // Args
        );
    }

    function widget($args, $instance) {

É necessário fazer essa alteráção para todos os Widgets que ainda usam o formato antigo de definição do constructor. O bom é que por ser um erro do tipo E_USER_DEPRECATED, o erro não vai aparecer no seu website quando o Debug Mode estiver inactivo.

(Visited 77 times, 1 visits today)

Elisio Leonardo

Elisio Leonardo is an experienced Web Developer, Solutions Architect, Digital Marketing Expert, and content producer with a passion for technology, artificial intelligence, web development, and entertainment. With nearly 15 years of writing engaging content on technology and entertainment, particularly Comic Book Movies, Elisio has become a trusted source of information in the digital landscape.