我以前在写主题的时候曾经遇到过这样一个问题,其他作者朋友们应该也会遇到,就是wp_nav_menu默认的fallback是wp_page_menu,也就是在第一次安装主题时,如果用户没去设置菜单,会默认调用wordpress的页面列表作为菜单,这样会造成一个困扰,那就是一些用户页面太多,导致第一次使用主题时把导航界面撑的很难看,所以也看到有的作者会在主题里加上说明,希望用户启用主题后先去后台设置一个菜单,但如果遇到不认真看说明的用户怎么办呢?其实我们可以设置一个不一样的fallback,如果用户第一次启用主题并且没有设置菜单,会在导航上直接显示一个指向设置菜单页面的链接,这样既美观又实用,我曾经在mrmac主题中用到这段函数,(此丑陋的主题没有通过官方审核所以就不拿出来献丑了)把这段代码拿出来跟大家分享一下,
在模板函数中添加函数如下:
function link_to_menu_editor( $args )
{
if ( ! current_user_can( 'manage_options' ) )
{
return;
}
extract( $args );
$link = $link_before
. '<a href="' .admin_url( 'nav-menus.php' ) . '">' . $before . 'Add a menu' . $after . '</a>'//此处可以改成你想要用户前往的页面地址,比如主题设置页面
. $link_after;
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;
}
然后在需要调用菜单的地方,将原本的<?php wp_nav_menu ; ?>
改为如下函数:
<?php wp_nav_menu( array( 'theme_location' => 'primary',//调用的菜单,依据你的主题而定 'fallback_cb' => 'link_to_menu_editor' //调用link_to_menu_editor的fallback ) ); ?>
效果如下:
link_to_menu_editor is coded by http://xiaohudie.net. Any posts here is one hundred percent original, so please keep my link so as not to hurt this pretty girl. -
哈哈 你博客真牛啊