在面向对象的开发插件中创建菜单页面

时间:2014-06-30 作者:user54952

我第一次尝试按照OOP的方式为Wordpress构建插件。尝试使用创建子菜单页时遇到一些问题add_users_page() 作用

以下是我的代码的简单版本:

class MyPlugin  {
    public function __construct()
    {
       add_action(\'admin_menu\', array($this, \'create_menu\'));
    }

    public static function create_menu()
    {
    add_users_page( \'My Plugin Menu\', \'My Plugin Menu (Test)\', \'list_users\', \'mp_test_page\', array($this, \'display_test_page\'));
    }

    public static function display_test_page()
    {
    if ( !current_user_can( \'list_users\' ) )  {
    wp_die( __( \'You do not have sufficient permissions to access this page.\' ) );
            }
    echo \'<h2>Test page</h2>\';
    echo \'<p>The Problem : I cannot see that output in the corresponding submenu page</p>\';
    }
}
new MyPlugin();
问题是我无法在display_test_page() 作用虽然子菜单页确实是在用户常规菜单中创建的。

提前感谢您的帮助,

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

静态和非静态用法混淆了。您的样式是非静态的,但您的方法被声明为非静态的。如果启用WP_DEBUG mode 您将看到以下错误:

注意:未定义变量:this

警告:call\\u user\\u func\\u array()要求参数1是有效的回调,第一个数组成员不是有效的类名或对象

这是因为静态方法不“知道”什么$this 引用,因为static与类的特定实例无关。

只需将您的方法声明为public 而不是public static 对于此代码组织。

结束

相关推荐

WP_DROPDOWN_PAGES默认值

我有一个页面下拉菜单,但在我转到所选页面后,让我们说“关于我们”,dropbown的默认标题按钮是页面的标题,“关于我们”,因此我希望标题/默认选项是“请选择页面”或类似的内容。我的代码是:wp_dropdown_pages(\"title_li=&depth=1&sort_column=menu_order&child_of=\".$post->post_parent.\"&echo=0&selected=$currPage\"); 我做错了什么,