问题描述
我是 WordPress 的新手,我仍然试图从这个众所周知的 CMS 中学到内在和外在的东西。
我想知道,如果我应该或必须有主菜单的回退?
这是我正在使用的:
// This theme uses wp_nav_menu() in one location.
register_nav_menus( array(
'primary' => __( 'Primary Navigation', 'xxxxxx' ),
) );
这里是我的 header.php 文件中的回调:
<nav>
<?php wp_nav_menu(
array(
'theme_location' => 'Primary',
'menu' => 'Primary',
'container' => '',
'items_wrap' => '<ul class="main">%3$s</ul>'
));
?>
</nav>
就像我说的,我是新的。所以请任何帮助将是非常欢迎的。
如果可以的话,请回应一个例子。
最佳解决办法
当用户没有将菜单分配给 theme_location
时,将使用参数 fallback_cb
。它应该是一个返回一个字符串的函数,但是可以使用__return_false()
来抑制任何输出:
wp_nav_menu(
array(
'theme_location' => 'primary',
// No menu available: no output.
'fallback_cb' => '__return_false'
)
);
您应该始终明确地声明回退,以保持代码的可读性。
以 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' ) ); ?>
这很混乱人们可以认为,如果没有分配给这个主题位置的菜单,主题现在将使用第一个可用的自定义菜单。错误。将使用页面列表。声明回调会更容易理解。
回退将获得所有菜单参数。您必须检查 echo
参数,因为 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="'%20.admin_url(%20'nav-menus.php'%20)%20.%20'">' . $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;
… 和管理员将在主题的样式表期望的所有标记中获得有用的链接:
一般的访客将无所事事。
次佳解决办法
见食典中的 wp_nav_menu()
wp_nav_menu
的默认 fall-back(fallback_cb
参数) 为'wp_page_menu'
,因此如果不分配主菜单,我认为您应该 auto-magically 有一个页面菜单 (每个静态页面的菜单,只有静态页面) 。
不是这样吗?
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。