Слишком мало аргументов для функции WP_Widget::__construct()
Первый раз работаю с кастомным виджетом. Пытаюсь создать его таким образом:
<?php
namespace App;
class My_Widget extends \WP_Widget {
function My_Widget() {
$widget_ops = [
'name' => 'Мой виджет',
'description' => 'Мое описание'
];
parent::__construct( 'My_Widget', 'Мой виджет', $widget_ops );
}
}
function load_widget() {
register_widget( 'App\\my_widget' );
}
add_action( 'widgets_init', __NAMESPACE__ . '\\load_widget' );
И получаю такую ошибку:
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
Что я делаю не так? Спасибо!

Вы используете крайне устаревший метод создания виджета. Вместо именованной функции следует использовать метод __construct()
в качестве конструктора, как указано в документации.
namespace App;
class My_Widget extends \WP_Widget {
function __construct() {
$widget_ops = [
'name' => 'Мой виджет',
'description' => 'Мое описание'
];
parent::__construct( 'My_Widget', 'Мой виджет', $widget_ops );
}
}
function load_widget() {
register_widget( 'App\\my_widget' );
}
add_action( 'widgets_init', __NAMESPACE__ . '\\load_widget' );

Спасибо! Это работает. Здесь в codex остался старый метод в качестве примера: https://codex.wordpress.org/es:API_de_Widget#Desarrollando_Widgets.

К сожалению, похоже, что испанская документация в codex сильно устарела. Используйте developer.wordpress.org, если это возможно (я не смог понять, есть ли там качественные испанские переводы).

Это потрясающе и решило мою проблему с настройкой - теперь работает на PHP8. Большое спасибо!

Мои выводы: 1. Не копировать сигнатуру конструктора родительского класса (т.е. ($id_base, $name, $widget_options = array(), $control_options = array())
). 2. Использовать конструктор без параметров (т.е. __construct()
), но 3. вызывать конструктор родительского класса с аргументами (например, parent::__construct( 'My_Widget', 'My widget', ...
).
