个性化阅读
专注于IT技术分析

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

在我的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


基于接受的答案, 默认情况下, 私有页面不会显示在菜单构建器中。这是解决该问题的一种方法。

赞(0)
未经允许不得转载:srcmini » WordPress-如何在wp_nav_menu中显示指向”私人”页面的链接?

评论 抢沙发

评论前必须登录!