如何检查菜单是否存在?

时间:2013-10-08 作者:justlemons

我当前正在根据父页面的标题检索导航菜单,如果该页面没有父页面,则它是自己的标题。

global $post;
$page_title;

if ($post->post_parent) {
    $page_title = get_the_title($post->post_parent);
}  else {
    $page_title = get_the_title($post);
}

$sidebar_title = \'Sidebar - \'.$page_title;
wp_nav_menu(array( \'menu\' => $sidebar_title));
我想先检查页面是否有自己的唯一菜单,而不是首先检查父菜单。这是我写的,但不起作用:

global $post;
$page_title = get_the_title($post);
$sidebar_title = \'Sidebar - \'.$page_title;

if ( !wp_nav_menu(array( \'menu\' => $sidebar_title, \'echo\' => false )) ) {

    $page_title = get_the_title($post->post_parent);
    $sidebar_title = \'Sidebar - \'.$page_title;
}

wp_nav_menu(array( \'menu\' => $sidebar_title ));
TLDR:如何检查菜单是否存在?

2 个回复
SO网友:Chip Bennett

假设您已正确实现自定义导航菜单:

注册导航菜单主题位置:

register_nav_menus( array(
    \'parent_page\' => "Parent Page",
    \'page_a\' => "Page A",
    \'page_b\' => "Page B", //etc
) );
呼叫wp_nav_menu() 正确:

wp_nav_menu( array(
    \'theme_location\' => \'page_a\'
);
。。。然后您可以使用the has_nav_menu() conditional 要确定主题位置是否有指定的菜单,请执行以下操作:

if ( has_nav_menu( \'page_a\' ) ) {
    // do something
}
在您的具体情况下,您可以这样做:

if ( has_nav_menu( \'page_a\' ) ) {
    wp_nav_menu( array( \'theme_location\' => \'page_a\' ) );
} else {
    wp_nav_menu( array( \'theme_location\' => \'parent_page\' ) );
}

SO网友:tzeldin88

我想我正在做一件与OP类似的事情:让我的客户机(wp admin user)创建菜单(在wp admin>Appearance>Menu中),这些菜单没有分配给特定的主题位置,因为这需要静态/一对一的关系。

相反,这些菜单是基于当前页面的顶级祖先的名称动态显示的(通过自定义小部件)。如果该名称与现有菜单的名称匹配,则显示菜单(由html之前/之后的标准小部件包装)。但是,如果没有匹配项,则不输出任何内容。

因此,在开始小部件输出之前,我需要检查菜单是否存在。

$args = array(
    \'menu\' => $menu_name, // from top-ancestor of current page
    \'echo\' => 0,  // true or 0
    \'theme_location\' => \'__fake\', // fake value, to prevent display of 1st real menu
    \'fallback_cb\' => false  // prevent display of 1st real menu
);
$menu = wp_nav_menu( $args );
if ($menu){ 
    # output
    echo $before_widget; // Before
    echo $before_title . $title . $after_title; // Title
    echo $menu;  
    echo $after_widget; // After
}

结束

相关推荐

Primary and secondary menus

我试图使主菜单上的每个选项卡都链接到次菜单,这样实际上,每个主选项卡都会指向次菜单中的一组选项卡,而不是保持静态。我希望你能帮助我,我不是一个高级WP用户,所以可以使用简单的术语。更新我已经添加了代码,但它已经显示在我的网页和仪表板上,所以我一定是弄错了,所以我将其粘贴在下面,以便您可以看到。我不知道如何找到主弹头,但我想这是我在主弹头上添加的内容。function km_dynamic_secondary_menu_reg() { global $km_nav_menus;