問題描述

我正在構建一個 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。