Prea puține argumente pentru funcția WP_Widget::__construct(),
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!

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

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

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

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

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