Как использовать add_action для подключения статического метода из другого класса

Я пытался использовать hook для вызова статического метода, но это не удалось.

Я добавляю действие в test.php вот так

 require_once('class.test.php');
add_action('register_new_user', array('Test','auto_signin'),20);

и моя функция auto_signin помещена в файл class.test.php:

 namespace MyTest;
echo(12);
class Test {
function __construct()
{

}

public static function auto_signin()
{
echo('hello');
die();
}
}

когда я отлаживал его, хук register_new_user действительно выполнялся, и из глобальной переменной wp_filters функция auto_signin была добавлена ​​в register_new_user, но эта функция никогда не выполнялась.

1

Решение

Твой класс, Test, является пространством имен, однако вы не используете пространство имен при вызове add_action,

Обновите это:

add_action('register_new_user', array('Test','auto_signin'),20);

К этому:

add_action( 'register_new_user', array( 'MyTest\Test', 'auto_signin' ), 20 );
3

Другие решения

Я читаю Справочник по плагину WordPress, но я не могу найти ни одного действия по имени register_new_user, так что вы должны использовать пользовательский хук.

Тем не менее, метод будет выполняться тогда и только тогда, когда он перехвачен, и этот перехват должен do_action крюк.

Смотрите этот код:

class PluginTest {
function __construct(){
}
public static function insertNew(){
echo 'Hi!';
die();
}
}

do_action('custom_admin_notices');

add_action( 'custom_admin_notices', array('PluginTest', 'insertNew'), 20);
global $wp_filter;
var_dump($wp_filter['custom_admin_notices']);

Если do_action строка закомментирована, вы все еще можете видеть хук в глобальной переменной, пока метод не будет выполнен. Поэтому проверьте, содержит ли строка, содержащая do_action выполнен.

0

По вопросам рекламы [email protected]