Troppi pochi argomenti per la funzione WP_Widget::__construct()
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!

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

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

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).

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

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', ...
).
