簡體   English   中英

WordPress-如何在wp_nav_menu中顯示指向“私人”頁面的鏈接?

[英]Wordpress - how to show links to 'private' pages in wp_nav_menu?

在我的WordPress網站中,即使用戶未登錄(我只需要顯示鏈接,而無需更改可以查看實際內容的人員,我也需要),我要求在主導航中顯示private鏈接(通過wp_nav_menu )。

我可以在其他地方使用wp_list_pages and指定要顯示的post_status(es)來執行此wp_list_pages and但看不到如何將其應用於wp_nav_menu

這有效:

wp_list_pages(array(
    'title_li'      => '',
    'child_of'      => $page->ID,    
    'post_status'   => 'published,private'
));

有辦法做到這一點嗎?

wp_nav_menu(array(
    'menu'              => 'primary',
    'theme_location'    => 'primary',
    'container'         => FALSE,
    'walker'            => new MegaMenuWalker
    'depth'             => 2));

到目前為止,我的搜索顯示了使用wp_get_nav_menu_items鈎子對結果進行后處理以過濾出私人頁面(或草稿)的方法,但是我還沒有做相反的事情。

我想我可以執行自定義查詢來以這種方式獲取項目,但這不會讓我使用我的自定義沃克。

wp_get_nav_menu_items( $menu, $args )的是wp_get_nav_menu_items( $menu, $args )確實允許我指定post_status參數,但是我不得不應用自己的渲染而不是能夠使用walker……除非有某種方法可以在外面使用walker wp_nav_menu的上下文?

以下是在菜單構建器中顯示“專用頁面”的簡短代碼段:

add_filter( 'nav_menu_meta_box_object', 'show_private_pages_menu_selection' );
/**
* Add query argument for selecting pages to add to a menu
*/
function show_private_pages_menu_selection( $args ){
    if( $args->name == 'page' ) {
        $args->_default_query['post_status'] = array('publish','private');
    }
    return $args;
}

將其添加到自定義插件或主題functions.php ,您將可以在任何菜單中添加私有頁面。

wp_nav_menu函數僅瀏覽所需菜單中的鏈接,而不獲取它們。 從源代碼( line 270 )中可以看出,獲取鏈接的函數僅獲得名稱/ id / etc。 菜單中的任何其他參數。

手冊

顯示在外觀→菜單面板中創建的導航菜單。

給定一個theme_location參數,該函數將顯示分配給該位置的菜單。 如果不存在這樣的位置或沒有為其分配菜單,則參數fallback_cb將確定顯示的內容。

如果未提供theme_location參數,則函數顯示

  • 與菜單參數給定的ID,子段或名稱匹配的菜單;
  • 否則,第一個非空菜單; 否則(或者如果menu給定的菜單為空),則輸出fallback_cb參數給定的函數(默認為wp_page_menu());
  • 否則什么都沒有。

因此,您需要使用WP管理面板將這些私有頁面添加到菜單中,或創建自己的功能來獲取頁面並構建菜單(請注意:不是nav_walker因為它僅使用數據而不會獲取它)。

在接受的答案的基礎上,默認情況下,私有頁面不會顯示在菜單構建器中 這是解決該問題的一種方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM