3

我尝试使用钩子调用静态方法,但失败了。

我像这样在 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,但该函数从未执行过。

4

2 回答 2

7

您的类 ,Test是命名空间的,但是在调用add_action.

更新这个:

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

对此:

add_action( 'register_new_user', array( 'MyTest\Test', 'auto_signin' ), 20 );
于 2017-01-31T10:50:39.493 回答
1

我阅读了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被执行。

于 2017-01-31T05:27:53.123 回答