我尝试使用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,但该函数从未执行过。
答案 0 :(得分:4)
您的类Test
是命名空间,但在调用add_action
时您没有使用任何命名空间。
更新此内容:
add_action('register_new_user', array('Test','auto_signin'),20);
对此:
add_action( 'register_new_user', array( 'MyTest\Test', 'auto_signin' ), 20 );
答案 1 :(得分:0)
我看了Wordpress Plugin API Reference,但我找不到任何名为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
的行是否已执行。