fall back for main menu?

时间:2012-09-07 作者:MartyBoi

我是WordPress的新手,仍然在努力学习这个著名CMS的输入和输出。

我想知道,我是否应该或必须有一个主菜单后备?

这就是我正在处理的问题:

// This theme uses wp_nav_menu() in one location.
register_nav_menus( array(
    \'primary\' => __( \'Primary Navigation\', \'xxxxxx\' ),
) );
这是我标题中的回调。php文件:

<nav>            
    <?php wp_nav_menu( 
    array(
        \'theme_location\' => \'Primary\', 
        \'menu\' =>  \'Primary\',
        \'container\' => \'\', 
        \'items_wrap\' => \'<ul class="main">%3$s</ul>\'  
    )); 
?>
</nav>
就像我说的,我是新来的。所以请大家帮忙吧。

如果可以,请举例说明。

2 个回复
SO网友:fuxia

参数fallback_cb 当用户没有为您的theme_location. 它应该是一个返回字符串的函数,但您可以使用__return_false() 要抑制任何输出,请执行以下操作:

wp_nav_menu(
    array(
        \'theme_location\' => \'primary\',
        // No menu available: no output.
        \'fallback_cb\'    => \'__return_false\'
    )
);
你应该always declare the fallback explicitly 保持代码可读性。

以TwentyEleven为例:

<?php 
/* Our navigation menu. If one isn\'t filled out, wp_nav_menu 
falls back to wp_page_menu. The menu assigned to the primary 
location is the one used. If one isn\'t assigned, the menu with 
the lowest ID is used. */ 
?>
<?php wp_nav_menu( array( \'theme_location\' => \'primary\' ) ); ?>
这很令人困惑。人们可能会认为,如果没有为该主题位置分配菜单,则该主题现在将使用第一个可用的自定义菜单。Wrong. 将使用页面列表。声明回调会更容易理解。

回退将获取所有菜单参数。你必须inspect the echo parameter, 因为WordPress不会为你处理这些。并确保也尊重其他参数,以获得正确样式的输出。

一个高级示例:如果没有为主题位置指定菜单,它将不返回任何内容,如果当前用户确实可以创建菜单,它将返回指向菜单编辑器的链接:

/**
 * Menu fallback. Link to the menu editor if that is useful.
 *
 * @param  array $args
 * @return string
 */
function link_to_menu_editor( $args )
{
    if ( ! current_user_can( \'manage_options\' ) )
    {
        return;
    }

    // see wp-includes/nav-menu-template.php for available arguments
    extract( $args );

    $link = $link_before
        . \'<a href="\' .admin_url( \'nav-menus.php\' ) . \'">\' . $before . \'Add a menu\' . $after . \'</a>\'
        . $link_after;

    // We have a list
    if ( FALSE !== stripos( $items_wrap, \'<ul\' )
        or FALSE !== stripos( $items_wrap, \'<ol\' )
    )
    {
        $link = "<li>$link</li>";
    }

    $output = sprintf( $items_wrap, $menu_id, $menu_class, $link );
    if ( ! empty ( $container ) )
    {
        $output  = "<$container class=\'$container_class\' id=\'$container_id\'>$output</$container>";
    }

    if ( $echo )
    {
        echo $output;
    }

    return $output;
}
现在我们可以这样叫这个菜单…

$menu = wp_nav_menu(
    array(
        \'theme_location\' => \'primary\',
        \'fallback_cb\'    => \'link_to_menu_editor\',
        \'echo\'           => FALSE
    )
);

echo $menu;
…管理员将在主题样式表所需的所有标记中获得有用的链接:

enter image description here

常客一无所获。

SO网友:helgatheviking

看见wp_nav_menu() in the Codex

默认回退(fallback_cb 参数)用于wp_nav_menu\'wp_page_menu\' 因此,我认为如果不指定主菜单,您应该自动神奇地拥有一个页面菜单(一个包含每个静态页面且只有静态页面的菜单)。

不是这样吗?

结束

相关推荐

Wordpress Custom Menus Issue

在我的模板中,我使用这样的调用来输出一些自定义菜单:<?php wp_nav_menu(array(\'container_class\' => \'secondary-navigation\', \'theme_location\' => \'secondary\')); ?> 自从升级到WordPress 3.1.4后,我就可以获得完整的页面列表,而不是自定义菜单我看到修复程序(通过谷歌)说我应该添加以下内容来修复此问题:\'fallback_cb\' => f