将某些操作仅限于插件特定的管理菜单页面

时间:2013-03-12 作者:tfrommen

我正在开发一个插件,希望将某些内容仅限于插件特定的管理菜单页面。因此,在将(子)菜单页面添加到数组中时,我会写入返回的段塞,以便稍后在当前页面上对其进行检查。

问题似乎是get_current_screen 正在返回null 从/之前调用时admin_init. 然而,我将菜单页面添加到admin_menu - 在之前admin_init.

这是not working 代码:

add_action( \'admin_menu\', \'my_admin_menu\' );
function my_admin_menu() {
    // Set up plugin admin menu
    $menu_pages = array();
    $menu_pages[] = add_menu_page( ... );
    $menu_pages[] = add_submenu_page( ... );

    $screen = get_current_screen(); // UNFORTUNATELY, $screen is null here
    $screen = $screen->id;
    foreach ( $menu_pages as $page ) if ( $screen === $page ) {
        // Do plugin-specific stuff
    }
} // function my_admin_menu
那么,我真的必须以这样一种方式存储pages数组吗?我以后可以在挂接在后面的某个函数中访问它admin_init? 我考虑在定义页面的地方使用页面slug,然后忘记它。

正如托肖所指出的,人们可以用鼻涕虫作为钩子(它们实际上是什么):

$page = add_menu_page( ... );
add_action( $page, ... );
然而,当需要current screen, 吊钩在链条中的位置太早,因此可以/应该使用add_action( \'load-\' . $page, ...); 相反

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

弹头返回add_menu_page() 是操作的名称。

foreach ( $menu_pages as $action )
    add_action( $action, "callback_handler" );
查看我的演示插件中的注释T5 Admin Menu Demo.

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴