在我的WordPress网站上, 即使用户未登录(我只需要显示链接, 而无需更改谁可以查看实际内容), 我也要求在主导航中显示私有链接(通过wp_nav_menu)。
我可以在其他地方使用wp_list_pages并指定要显示的post_status(es)来执行此操作, 但看不到如何将其应用于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)确实允许我指定post_status参数, 但是我不得不应用自己的渲染而不是能够使用Walker……除非有某种方法可以在外面使用Walker wp_nav_menu的上下文?
#1
wp_nav_menu函数仅浏览所需菜单中的链接, 而不获取它们。从源代码(第270行)中可以看出, 获取链接的函数仅获得名称/ id / etc。菜单中的任何其他参数。
从手册中:
显示在外观→菜单面板中创建的导航菜单。给定一个theme_location参数, 该函数将显示分配给该位置的菜单。如果不存在这样的位置或没有为其分配菜单, 则参数fallback_cb将确定显示的内容。如果没有给定theme_location参数, 该函数将显示与菜单参数给定的ID, 段或名称匹配的菜单;否则, 第一个非空菜单;否则(或者如果menu给定的菜单为空), 则输出fallback_cb参数给定的函数(默认为wp_page_menu());否则什么都没有。
因此, 你需要使用WP管理面板将这些私有页面添加到菜单中, 或者创建自己的函数来获取页面并构建菜单(请注意:不是nav_walker, 因为它仅使用数据而不获取它)。
#2
以下是在菜单构建器中显示”专用页面”的简短代码段:
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中, 就可以将私有页面添加到任何菜单中。
#3
基于接受的答案, 默认情况下, 私有页面不会显示在菜单构建器中。这是解决该问题的一种方法。
评论前必须登录!
注册