开发主题时管理面板中出现警告/错误

时间:2013-01-18 作者:devs

我正在为我的网站开发一个主题。我一激活主题,以下错误/警告就会显示在每个页面的管理面板顶部。

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method WPEditorAdmin::removeDefaultEditorMenus() should not be called statically in C:\\Users\\...\\wp-includes\\plugin.php on line 406

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method WPEditorAdmin::buildAdminMenu() should not be called statically in C:\\Users\\...\\wp-includes\\plugin.php on line 406

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method WPEditorAdmin::addThemesPage() should not be called statically in C:\\Users\\...\\wp-includes\\plugin.php on line 406

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method WPEditorAdmin::editorStylesheetAndScripts() should not be called statically in C:\\Users\\...\\wp-includes\\plugin.php on line 406
我想知道如何解决这些错误,而不再发生这种情况?这是一个屏幕截图。

enter image description here

1 个回复
SO网友:chrisguitarguy

所以你的代码在一个类中,假设它看起来像这样。。。

<?php
class WPSE82245
{
    public function action_init()
    {
        // do stuff
    }
}
现在你试着把它挂在某个东西上。。。

add_action(\'init\', \'array(\'WPSE82245\', \'action_init\'));
init 钩子激发,WordPress尝试调用您的方法。这就像你写下这个。。。

WPSE82245::action_init();
但是PHP不喜欢这样,因为您没有声明您的方法static, 也就是说,可以在没有容器类实例的情况下使用(如上面的示例)。

这很有道理,如果您使用$this 用你的方法?静态调用它会导致运行时错误$this 正在对象上下文之外使用。

您可以通过声明方法静态来删除错误。。。

<?php
class WPSE82245
{
    public static function action_init()
    {
        // do stuff
    }
}
或者使用类的实例作为数组的第一个元素add_action.

<?php
class WPSE82245
{
    public function action_init()
    {
        // do stuff
    }
}

$cls = new WPSE82245();
add_action(\'init\', array($cls, \'action_init\'));
以上只是一个例子many 不同的ways 在WordPress主题/插件中实例化类。

结束