Prea puține argumente pentru funcția WP_Widget::__construct(),

21 feb. 2021, 16:05:02
Vizualizări: 14.5K
Voturi: 5

Prima mea experiență cu widget-uri personalizate. Încerc să-l creez astfel:

<?php
namespace App;

class My_Widget extends \WP_Widget {
    function My_Widget() {

        $widget_ops = [
            'name' => 'My widget',
            'description' => 'My description'
        ];
        parent::__construct( 'My_Widget', 'My widget', $widget_ops );
    }
}

function load_widget() {
    register_widget( 'App\\my_widget' );
}
add_action( 'widgets_init', __NAMESPACE__ . '\\load_widget' );

Și primesc această eroare:

Too few arguments to function WP_Widget::__construct(), 0 passed in /srv/www/contraindicaciones.net/current/web/wp/wp-includes/class-wp-widget-factory.php on line 61 and at least 2 expected

Ce fac greșit? Mulțumesc!

0
Toate răspunsurile la întrebare 1
4
12

Folosești o metodă extrem de învechită de creare a unui widget. Ar trebui să folosești funcția __construct(), nu o funcție numită, drept constructor, conform documentației.

namespace App;

class My_Widget extends \WP_Widget {
    function __construct() {

        $widget_ops = [
            'name' => 'My widget',
            'description' => 'My description'
        ];
        parent::__construct( 'My_Widget', 'My widget', $widget_ops );
    }
}

function load_widget() {
    register_widget( 'App\\my_widget' );
}
add_action( 'widgets_init', __NAMESPACE__ . '\\load_widget' );
21 feb. 2021 16:28:35
Comentarii

Mulțumesc! Funcționează. Aici în codex rămâne vechea metodă ca exemplu: https://codex.wordpress.org/es:API_de_Widget#Desarrollando_Widgets.

aitor aitor
21 feb. 2021 16:50:34

Din păcate, se pare că documentația în spaniolă din codex este extrem de învechită. Folosește developer.wordpress.org dacă poți (nu am reușit să verific dacă există traduceri decente în spaniolă).

Jacob Peattie Jacob Peattie
21 feb. 2021 16:58:01

Este fantastic și a rezolvat configurarea mea - acum rulează pe PHP8. Mulțumesc mult!

Frank Frank
17 oct. 2021 00:34:39

Concluzia mea: 1. Nu copia semnătura constructorului părintelui (adică ($id_base, $name, $widget_options = array(), $control_options = array())). 2. Folosește un constructor fără parametri (adică __construct()) dar 3. apelează constructorul părintelui cu argumente (de exemplu parent::__construct( 'My_Widget', 'My widget', ...).

twigmac twigmac
30 ian. 2025 14:58:35