Wordpress - 如何在 wp_nav_menu 中显示指向“私人”页面的链接?

Chr*_*rey 0 php wordpress wordpress-theming

在我的 WordPress 网站private中,wp_nav_menu即使用户未登录,我也需要在主导航中显示链接(通过)(我只需要显示链接,而不是更改可以查看实际内容的人)。

我可以在其他地方执行此操作,使用wp_list_pages and指定要显示的 post_status(es),但我看不到如何将其应用于wp_nav_menu.

这有效:

wp_list_pages(array(
    'title_li'      => '',
    'child_of'      => $page->ID,    
    'post_status'   => 'published,private'
));
Run Code Online (Sandbox Code Playgroud)

有没有办法做类似的事情?

wp_nav_menu(array(
    'menu'              => 'primary',
    'theme_location'    => 'primary',
    'container'         => FALSE,
    'walker'            => new MegaMenuWalker
    'depth'             => 2));
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的搜索显示了多种对结果进行后处理以使用wp_get_nav_menu_items钩子过滤掉私人页面(或草稿)的方法,但我还没有找到相反的方法。

我想我可以做一个自定义查询来以这种方式抓取项目,但这不会让我使用我的自定义步行者。

诱人的是wp_get_nav_menu_items( $menu, $args ),它确实允许我指定 post_status 参数,但是我只能应用我自己的渲染而不是能够使用 walker...除非有某种方法可以在wp_nav_menu?

Fab*_*aux 7

这是在菜单构建器中显示私人页面的简短片段:

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;
}
Run Code Online (Sandbox Code Playgroud)

将此添加到自定义插件或主题中functions.php,您将能够将私人页面添加到任何菜单中。