Я пытался использовать 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, но эта функция никогда не выполнялась.
Твой класс, Test
, является пространством имен, однако вы не используете пространство имен при вызове add_action
,
Обновите это:
add_action('register_new_user', array('Test','auto_signin'),20);
К этому:
add_action( 'register_new_user', array( 'MyTest\Test', 'auto_signin' ), 20 );
Я читаю Справочник по плагину 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
выполнен.