是否可以从ADD_USER_PAGE传递变量?

时间:2013-12-10 作者:bestprogrammerintheworld

如果像这样连接到管理菜单:

function adminmenu_users_reserves(){    
    add_users_page(\'Reserver\', \'Reserver\', \'read\', \'reserve_list\', \'show_userlist\');
}
add_action( \'admin_menu\', \'adminmenu_users_reserves\' );
并且有一个功能

function show_userlist(show_reserves = true, $title) {
   code...
}
我可以传递变量吗$show_reserves 从…起add_users_page() 以某种方式(有一次我需要$show_reserves 如果是真的,那么我需要它是假的)

还是我必须用两种不同的函数来解决我的问题?(用于几乎相同的功能)

function adminmenu_users_reserves(){    
    add_users_page(\'Reserves\', \'Reserves\', \'read\', \'reserve_list\', \'show_reservelist\');
}
add_action( \'admin_menu\', \'adminmenu_users_reserves\' );

function adminmenu_users_registered(){    
    add_users_page(\'Registered\', \'Registered\', \'read\', \'registered_list\', \'show_registeredlist\');
}
add_action( \'admin_menu\', \'adminmenu_users_registered\' );
UPDATE因为托肖给了我一个很好的答案(https://wordpress.stackexchange.com/users/73/toscho) 我想分享我的解决方案-如果其他人将来也有同样的问题:

class userList
{
    public $show_reserves = false;
    public $title = \'Reserver\';

    //Show a list of all reserves/or registered users in the system ordered by register-date
    function render() {

        $reserves = $this->show_reserves;
        $title = $this->title;        

        echo $title;
        if ($reserves === true) {
            ....code...
        }
     }
}

function adminmenu_users_reserves(){    
    $userlist = new userList();
    add_users_page(\'Reserver\', \'Reserver\', \'read\', \'reserve_list\', array( $userlist, \'render\' ));
}
add_action( \'admin_menu\', \'adminmenu_users_reserves\' );

function adminmenu_users_registered(){    
    $userlist = new userList();
    $userlist->show_reserves = false;
    $userlist->title = \'Anmälda\';
    add_users_page(\'Anmälda\', \'Anmälda\', \'read\', \'registered_list\', array( $userlist, \'render\' ));
}
add_action( \'admin_menu\', \'adminmenu_users_registered\' );

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

解决这个问题最简单、最干净的方法是使用专门的对象。

首先创建一个可以保存额外信息的类:

class Menu_Page
{
    public $extra = \'\';

    public function render()
    {
        print $this->extra;
    }
}
现在从该类创建一个对象…

$page        = new Menu_Page;
$page->extra = \'Hello World!\';
…并注册其方法render() 作为回调:

add_users_page( 
    \'Test\', 
    \'Test\', 
    \'manage_options\', 
    \'test\', 
    array( $page, \'render\' ) 
);

结束

相关推荐

Order Admin sub-menu items?

我正在使用向CPT管理菜单添加项目add_submenu_page 这很好,但它们被添加到CPT选项后的子菜单底部。我希望能够将它们放在最上面,但我想这个问题也可以应用于订购所有基于管理员的子菜单项。我所尝试的(不起作用,我尝试了几种变体),function custom_menu_order($menu_ord) { if (!$menu_ord) return true; return array( \'edi