这是一个棘手的问题。您实际上不需要查看wp-includes/plugin。php,这个文件没有什么问题,它是一个核心文件,所以你应该像所有其他核心文件一样,不要管它。
它之所以棘手,是因为core中的操作和过滤器需要一个正常工作的回调函数,但当您add_action
或add_filter
它从未真正验证回调。事实上,它在执行时从不验证它do_action
和apply_filters
也可以,但它会直接传递给call_user_func_array
.
所以,每当您看到这个错误(或者它是非数组姐妹错误)时,它仅仅意味着某个主题或插件在add_action
或add_filter
:
add_action( \'init\', \'function_that_does_not_exist\' );
add_action( \'init\', array( \'Class_Name\', \'method_that_does_not_exist\' ) );
add_action( \'init\', array( \'Non_Existent_Class\', \'method\' ) );
add_action( \'init\', array( \'Class_Name\', \'method\', \'huh?\' ) );
add_action( \'init\', array( \'Just a bogus array\' ) );
您的具体错误是案例#4,它将回调作为数组传递,但数组中有2个以上的值,这正是PHP所抱怨的。这是WordPress操作、优先级和参数的常见错误:
add_action( \'foo\', array( $this, \'bar\', 10, 2 ) );
看,这看起来有点像我们
foo
与我们
bar
具有两个参数的优先级为10的方法。但实际上,我们将传递一个由四个元素组成的数组作为回调函数。这是我们真正想要做的:
add_action( \'foo\', array( $this, \'bar\' ), 10, 2 );
请注意回调是一个2元素数组,20和2是
add_action
.
希望这能为您的插件带来一些启示。