ADD_OPTION_PAGE功能行为异常

时间:2010-11-04 作者:Mild Fuzz

我正在尝试创建一个类,以使添加新设置的工作更轻松。我遇到的问题是,尽管我已经跟踪了变量的所有阶段,字符串“manage\\u options”似乎并没有授予admin修改和选项的权利。我不断收到“您没有足够的权限访问此页面。”当我尝试访问新设置页面时。

下面是该类、创建函数及其动作挂钩的一个高度简化的版本。

class optionObject{
    var $user_level = \'manage_options\';

    function add_page() {

        add_options_page(menu_page_title, page_title, $this->user_level, menu_slug, array(&$this, \'do_page\'));

    }
    function do_page(){
        //do stuff to display page
    }
}

function test_options(){
    $options = new optionObject();

    add_action(\'admin_menu\', $options->add_page());
}

add_action(\'admin_init\', \'test_options\' );
未编辑版本here

2 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

admin_init 被称为after wp-admin/menu.php is included, 所以the access check has already been executedthe admin_menu action has fired 执行时test_options(). 移除admin_init 钩住并呼叫test_options() 或者找到另一种构造代码的方法,以便admin_menu 挂钩设置正确。

您可能认为它可以工作,因为您在其他页面上看到菜单选项。这是因为the menu is drawn after the page access is checked:

菜单绘制在:

SO网友:t31os

简对原始问题的回答和评论都很到位。。

下面是一个代码工作的示例,它是最基本的形式。。。

// Either uncomment the constructor function or the line following the creation of the object, simply showing you two working methods
class test_stuff {
    var $user_level = \'manage_options\';
    // PHP4 or PHP5 constructor, you choose - uncomment function line as appropriate
    //function test_stuff() {
    //function __construct() {
    //    add_action( \'admin_menu\', array( $this, \'add_new_page\' ) );
    //}
    function add_new_page() {
        add_options_page( \'somename\', \'somename\', $this->user_level, \'somepagename\', array( $this, \'display_page\' ) );
    }
    function display_page() {
        echo \'Hello World!\';
    }
}
$test_stuff = new test_stuff();
//add_action( \'admin_menu\', array( $test_stuff, \'add_new_page\' ) ); // Alternative to using the constructor function
希望这有助于。。。

结束

相关推荐