Php Wordpress-如何显示到';私人';wp_导航菜单中的页面?

Php Wordpress-如何显示到';私人';wp_导航菜单中的页面?,php,wordpress,wordpress-theming,Php,Wordpress,Wordpress Theming,在我的WordPress站点中,我需要在主导航中显示私有链接(通过wp\u nav\u菜单),即使用户没有登录(我只需要显示链接,而不需要更改谁可以查看实际内容) 我可以在其他地方执行此操作,使用wp\u列表页面和指定要显示的post\u状态,但我看不到如何将其应用于wp\u导航菜单 这项工作: wp_列表_页面(数组)( “title_li'=>”, 'child_of'=>$page->ID, “发布状态”=>“已发布,私有” )); 有没有类似的方法 wp\u导航菜单(阵列)( '菜单'

在我的WordPress站点中,我需要在主导航中显示
私有
链接(通过
wp\u nav\u菜单
),即使用户没有登录(我只需要显示链接,而不需要更改谁可以查看实际内容)

我可以在其他地方执行此操作,使用
wp\u列表页面和
指定要显示的post\u状态,但我看不到如何将其应用于
wp\u导航菜单

这项工作:

wp_列表_页面(数组)(
“title_li'=>”,
'child_of'=>$page->ID,
“发布状态”=>“已发布,私有”
));
有没有类似的方法

wp\u导航菜单(阵列)(
'菜单'=>'主',
“主题位置”=>“主”,
'container'=>FALSE,
“walker”=>新MegaMenuWalker
‘深度’=>2);
到目前为止,我的搜索显示了一系列使用
wp\u get\u nav\u menu\u items
hook对结果进行后期处理以过滤出私人页面(或草稿)的方法,但我还没有找到相反的方法

我想我可以做一个自定义查询,以这种方式获取项目,但这不允许我使用自定义walker


诱人的是,
wp\u get\u nav\u menu\u items($menu,$args)
允许我指定post\u status参数,但是我只能应用自己的渲染,而不能使用walker。。。除非有某种方法可以在
wp\u nav\u菜单

的上下文之外使用助行器,
wp\u nav\u菜单
功能只遍历所需菜单中的链接,而不获取它们。从源代码()中可以看出,获取链接的函数只获取菜单的名称/id/等,而不获取任何其他参数

从:

显示在外观中创建的导航菜单→ 菜单面板

给定主题位置参数,函数将显示菜单 分配到那个位置。如果不存在这样的位置或没有菜单 分配给它时,参数fallback_cb将确定什么是 显示

如果未指定主题位置参数,则显示该函数

  • 与菜单参数给定的ID、slug或名称匹配的菜单
  • 否则,第一个非空菜单;否则(或如果菜单已给出 “按”菜单为空),由回退\u cb给出的函数输出 参数(默认情况下为wp_页面_菜单())
  • 否则什么也没有

因此,您需要使用WP管理面板将这些私人页面添加到菜单中,或者创建一个自己的函数来获取页面并构建菜单(请注意:不是一个
nav_walker
,因为它只使用数据而不获取数据)。

基于已接受的答案,默认情况下,菜单生成器中不会显示私人页面

以下是一个简短的片段,用于显示菜单生成器中的私人页面:

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_菜单),然后使用walker呈现项目?是的,手动插入导航的页面确实以这种方式显示。手动操作有点痛苦,但总比什么都不做要好。谢谢