[英]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.