问题描述

我正在构建一个 WordPress 插件,我想要一个无法通过子菜单访问的 edit-item 页面 (因为这个项目不会被指定) 。

此资源 (http://codex.wordpress.org/Adding_Administration_Menus) 显示了如何将管理页面与功能相关联,但不显示如何将其添加为菜单项。

这可以做吗

谢谢!

最佳解决方案

是的,这可以完成 (从技术上讲,它更像是注册整个事情,然后再删除菜单项),但是这将是最简单的 (我想) 检查 $_GET super-global 中的参数,以表明用户希望编辑特定的项目。

例如,您可以有一个页面列出要编辑的项目,然后单击’edit’ 将项目的 ID 添加到当前 URL(query-string) 。

在显示此页面的功能中,如果定义了 ID,则向他们提供编辑该项目的页面。

否则,给他们列表视图。这就是帖子,网页和其他自定义帖子类型。

次佳解决方案

最佳解决方案 http://wordpress.org/support/topic/add-backend-page-without-menu-item 使用 add_submenu_page 与父 slug = null

第三种解决方案

add_submenu_page 与父 slug = null

要么

add_submenu_page,菜单 title = null

第四种方案

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

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

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

我的解决方案是将 $parent_slug 设置成一个假的菜单,如'i_dont_exist'。菜单项不会显示,当查看管理画面时,页面标题将被正确填写。

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

第五种方案

是。通过子菜单甚至 WP 管理面板中的主菜单无法访问页面是非常有可能的。请参阅下面的代码段。

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');

希望这将有所帮助。

第六种方案

使用此代码创建新页面而不添加菜单

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";
}

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。