Troppi pochi argomenti per la funzione WP_Widget::__construct()

21 feb 2021, 16:05:02
Visualizzazioni: 14.5K
Voti: 5

Prima volta con un widget personalizzato. Sto provando a crearlo in questo modo:

<?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' );

E ottengo questo errore:

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

Cosa sto sbagliando? Grazie!

0
Tutte le risposte alla domanda 1
4
12

Stai utilizzando un metodo estremamente obsoleto per creare un widget. Dovresti usare la funzione __construct(), non una funzione con nome, come costruttore, come documentato.

namespace App;

class My_Widget extends \WP_Widget {
    function __construct() {

        $widget_ops = [
            'name' => 'Il mio widget',
            'description' => 'La mia descrizione'
        ];
        parent::__construct( 'My_Widget', 'Il mio widget', $widget_ops );
    }
}

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

Grazie! Funziona. Qui nel codex rimane il vecchio metodo come esempio: https://codex.wordpress.org/es:API_de_Widget#Desarrollando_Widgets.

aitor aitor
21 feb 2021 16:50:34

Sfortunatamente sembra che la documentazione in spagnolo sul codex sia estremamente obsoleta. Usa developer.wordpress.org se puoi (non sono riuscito a capire come verificare se ci sono traduzioni decenti in spagnolo).

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

È fantastico e ha risolto il mio setup - ora funziona con PHP8. Molte grazie!

Frank Frank
17 ott 2021 00:34:39

Il mio riassunto: 1. Non copiare la firma del costruttore della classe genitore (cioè ($id_base, $name, $widget_options = array(), $control_options = array())). 2. Usa un costruttore senza parametri (cioè __construct()) ma 3. chiama il costruttore del genitore con gli argomenti (es. parent::__construct( 'My_Widget', 'My widget', ...).

twigmac twigmac
30 gen 2025 14:58:35