如何添加一个WordPresspipe理页面,而不添加到菜单?

我正在构build一个WordPress插件,我希望有一个无法通过子菜单访问的编辑页面页面(因为这个项目不会被指定)。

这个资源(http://codex.wordpress.org/Adding_Administration_Menus)展示了如何将一个pipe理页面和一个函数关联起来,但是并没有把它作为一个菜单项来添加。

可以这样做吗?

谢谢!

是的,这是可以做到的(好吧,从技术上来说,更像注册整个事情,然后再删除菜单项),但它只是最简单的(我认为)检查$_GET超级全局以指示用户希望编辑特定项目。

例如,您可以有一个列出要编辑的项目的页面,单击“编辑”仅将该项目的ID添加到当前URL(查询string)。

在显示这个页面的函数中,如果定义了ID,给他们编辑该项目的页面。

否则,给他们的列表视图。 这就是post,页面和其他自定义posttypes的作用。

这里最好的解决schemehttp://wordpress.org/support/topic/add-backend-page-without-menu-item use parent_submenu_page with parent slug = null

add_submenu_page与父母slug = null

要么

菜单标题= null的add_submenu_page

是。 通过子菜单甚至WPpipe理面板中的主菜单都无法触及页面。 请参阅下面的代码片段。

 function myplugin_render_edit_page() { // Code contains the UI for edit page. } /** * Manage menu items and pages. */ function myplugin_register_admin_page() { global $_registered_pages; $menu_slug = plugin_basename('myplugin.php'); $hookname = get_plugin_page_hookname($menu_slug,''); if (!empty($hookname)) { add_action($hookname, 'myplugin_render_edit_page'); } $_registered_pages[$hookname] = true; } add_action('admin_menu', 'myplugin_register_admin_page'); 

希望这会有所帮助。

从我面前的答案,你可以看到,有很多方法可以做到这一点。 但是,我认为还有另外一种方式可能是最好的。

根据$_GET查询var的值不同加载页面是一个选项,但它可能不是一些人正在寻找。

关于add_submenu_page()的build议是正确的,但以前的每个build议都有问题。 将$menu_title设置$menu_title null不会使菜单项不被显示,只是使得链接没有任何文本。 链接仍然占用菜单中的一些空间,所以看起来很有趣。 设置$parent_slugnull没有这个问题,但我注意到该页面的HTML title不显示$page_title文本。

我的解决scheme是将$parent_slug设置$parent_slug假菜单slug,如'i_dont_exist' 。 菜单项不会显示,当查看pipe理员屏幕时,页面标题将被正确填写。

 add_submenu_page( '_doesnt_exist' ,__( 'Page title', 'textdomain' ) ,'' ,'manage_options' ,'menu_slug' ,'display_my_menu' ); 

使用这个代码来创build新的页面,而无需在菜单中添加

 add_action( 'admin_menu', 'register_newpage' ); function register_newpage(){ add_menu_page($appname, $appname, 'administrator','custompage', 'custom'); remove_menu_page('custom'); } function custom() { echo "hai"; } 

我已经尝试了所有的build议,但与各种相关的问题。

add_submenu_page的WordPress代码现在给出了正确的答案,这就是使用options.php作为你的父级子弹。 我尝试过使用组合名称的技巧,但是出现权限错误,在各个位置同样使用null或者导致菜单文本丢失(但仍然是可点击的),或者浏览器标题丢失。

使用options.php工作,我没有看到任何问题,因为它的使用。

我发现在仅添加null作为子菜单项的父级子弹时遇到的问题之一是,如果您正在查看特定页面,则子菜单本身不会显示(至less它不适用于我页面标题不显示)。

我所做的是在菜单标题中添加一个空span元素,并使用jquery遍历父元素并隐藏它。

使用add_submenu_page和NULL的父级绝对有效,但是如果你想保持与特定菜单相关的非链接页面(比如一个自定义的posttypes菜单),你必须使用@ Boopathi的答案变体:

 function my_hidden_submenu_page(){ //add the submenu page the usual way add_submenu_page('edit.php?post_type=custom-type', 'My Page Title', 'My Page Title', 'manage_options', 'my-page-slug', 'my_page_callback'); //then remove it remove_submenu_page('edit.php?post_type=custom-type','my-page-slug'); } add_action('admin_menu', 'my_hidden_submenu_page'); 

看起来好像这两个操作会互相取消,但remove_submenu_page不会取消注册callback函数; 它只是删除链接。

通过这种方式,当有人正在查看您的非链接页面时,正确的导航菜单(本例中为我们的自定义posttypes菜单)仍然显示为活动状态。

我发现你可以通过重新使用插入ID来实现,就像这样:

 add_menu_page( 'User AS Packages', 'User AS', 'manage_options', 'myplugin/editaspackages.php', 'UserASPackages', '', 8); add_menu_page( 'User ARP Packages', 'User ARP', 'manage_options', 'myplugin/editarppackages.php', 'UserARPPackages', '', 8); add_menu_page( 'AS Packages', 'AS Packages', 'manage_options', 'myplugin/ars-s2.php', 'ARPPackages', '', 8); 

最后3个使用位置8,最后一个覆盖前两个,所以前两个不出现。