При добавлении страниц в админку WordPress вы используете add_menu_page
, который принимает вызываемую функцию / метод.
class Foo
{
public function __construct()
{
add_menu_page($page_title, $menu_title, $capability, $menu_slug, [$this, 'bar'], $icon_url, $position);
}
public function bar(): void
{
echo 'Hello, World!';
}
}
Моя проблема в том, что я немного озадачен как передать аргумент в bar
, когда он принимает / ожидает параметры, например:
class Foo
{
public function __construct()
{
add_menu_page($page_title, $menu_title, $capability, $menu_slug, [$this, 'bar'], $icon_url, $position);
}
public function bar(string $name = ''): void
{
echo "Hello, {$name}!";
}
}
Я пробовал несколько разных подходов, но не могу заставить его работать:
[$this, 'bar', 'Bob']; // Warning: call_user_func_array() expects parameter 1 to be a valid callback, array must have exactly two members in /wp-includes/class-wp-hook.php on line 287
[$this, ['bar', 'Bob']] // Warning: call_user_func_array() expects parameter 1 to be a valid callback, second array member is not a valid method in /wp-includes/class-wp-hook.php on line 287
Итак, глядя на строку 287 этого файла, он использует call_user_func_array
, и я думаю, что кажется, что можно передать аргумент в параметре $function
для add_menu_page
, но я просто не могу его понять на работу:
// Avoid the array_slice() if possible.
if ( 0 == $the_['accepted_args'] ) {
$value = call_user_func( $the_['function'] );
} elseif ( $the_['accepted_args'] >= $num_args ) {
$value = call_user_func_array( $the_['function'], $args );
} else {
$value = call_user_func_array( $the_['function'], array_slice( $args, 0, (int) $the_['accepted_args'] ) );
}
Помощь будет признательна!