Wordpress - 如何显示私人'的链接wp_nav_menu中的网页?

时间:2015-06-02 06:10:15

标签: php wordpress wordpress-plugin wordpress-theming

在我的WordPress网站中,我要求在主导航中显示private个链接(通过wp_nav_menu),即使用户没有登录(我只需要显示链接) ,不要改变谁可以查看实际内容)。

我可以在其他地方执行此操作,使用wp_list_pages and指定要显示的post_status,但我无法查看如何将其应用于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 ......除非那里有&# 39;某种方式在wp_nav_menu

的背景之外使用助行器

3 个答案:

答案 0 :(得分:4)

以下是一个简短的代码段,用于在菜单构建器中显示私人页面:

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,您就可以将私人页面添加到任何菜单中。

答案 1 :(得分:0)

CGRect frame = CGRectMake(20, 330, 300, 60); slider1 = [[UISlider alloc] initWithFrame:frame]; [slider1 addTarget:self action:@selector(sliderActionMin:) forControlEvents:UIControlEventValueChanged]; [slider1 setBackgroundColor:[UIColor clearColor]]; slider1.minimumValue = 0.0; slider1.maximumValue = 55.0; slider1.continuous = YES; slider1.value= 16 slider1.contentMode=UIViewContentModeScaleToFill; [self.view addSubview:slider1]; slider2 = [[UISlider alloc] initWithFrame:frame]; [slider2 addTarget:self action:@selector(sliderActionMin:) forControlEvents:UIControlEventValueChanged]; [slider2 setBackgroundColor:[UIColor clearColor]]; slider2.minimumValue = 0.0; slider2.maximumValue = 55.0; slider2.continuous = YES; slider2.contentMode=UIViewContentModeScaleToFill; slider2.value=[SingletonClass sharedSingleton].minAge; [self.view addSubview:slider2]; 功能仅遍历所需菜单中的链接,而不是提取它们。从源代码(line 270)中可以看出,获取链接的函数只获取名称/ id / etc。菜单,而不是任何其他参数。

来自manual

  

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

     

给定一个theme_location参数,该函数显示菜单   分配到该位置。如果没有这样的位置或没有菜单   分配给它,参数fallback_cb将确定是什么   显示。

     

如果没有给出theme_location参数,则该函数显示

     
      
  • 与菜单参数给出的ID,slug或名称匹配的菜单;
  •   
  • 否则,第一个非空菜单;否则(或如果菜单给出   按菜单为空),输出由fallback_cb给出的函数   参数(默认为wp_page_menu());
  •   
  • 否则没有。
  •   

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

答案 2 :(得分:0)

默认情况下,根据接受的答案,私人网页不会显示在菜单构建器中。 Here's a way to get around that issue