WordPress 3.0 主题的向下兼容问题

直到现在我的 WordPress 还停留在 2.9.2,一直没有升到 3.0+。我们都知道 WordPress 3.0 对于单用户操作的博主而言,最耀眼的功能就在于导航菜单了,像我这样都还没有升级到 WordPress 3.0 的人来说,本没啥资格来谈论 3.0 的是与非,而且也有不少大虾们已经写过很多出彩的文章了。感谢一下陈小黑童鞋,给了我一个装好 WordPress 3.0 的测试站,让我在做的新主题有了开发的空间,我也就玩一下这 3.0 的导航菜单功能。

关于在主题中怎么添加 WordPress 3.0 的导航菜单功能我就不多说了,因为看很多人都写过鸟。我就来说一下这 3.0 的向下兼容问题。在我给新主题加上导航菜单功能后,发现一个很严重的问题,就是这个 wp_nav_menu() 调用函数居然只支持 WordPress 3.0,在我本地的 2.9 的环境中就报错了。可见 WordPress 官方的小组在升级的时候相当不给力啊,还要用户和开发者自己做向下兼容的处理。

看到一篇传说可以解决 WordPress 3.0 主题向下兼容以前版本的方法,不过明显作者在写代码的时候比较粗糙,并没有验证过(就算验证,也就是 WordPress 3.0 中作的测试),在我的 2.9 下还是行不通,仔细看了一下,也就是少了个判断,略加修改就可以使用了。

把以下代码复制到 WordPress 的 functions.php 中:

if ( function_exists('register_nav_menus') ) {
    function mytheme_addmenus() {
        register_nav_menus(array('primary' => 'The Main Menu'));
    }
    add_action( 'init', 'mytheme_addmenus' );
}
function mytheme_nav() {
    if ( function_exists( 'wp_nav_menu' ) )
        wp_nav_menu( 'menu=primary&container_class=pagemenu&fallback_cb=mytheme_nav_fallback' );
    else
        mytheme_nav_fallback();
}
function mytheme_nav_fallback() {
    wp_page_menu( 'show_home=Start&menu_class=pagemenu' );
}

然后在主题需要的地方,比如说 header.php 中用这行代码调用即可:

<?php mytheme_nav(); ?>

这样就好了。回过来解释一下加入 functions.php 中的代码,简单来说分这么几个过程:1.判断是否支导航菜单的函数(也就是判断是不是 WordPress 3.0)2.如果是,就再调用 wp_nav_menu() 这个 3.0 中的导航菜单函数,一些参数什么的都可以在这里设置。3.如果不是,就调用 3.0 以下支持的 wp_page_menu() 这个函数,当然你也可以不用 wp_page_menu(),自己写在此情况下输出的内容,比较个性化。最后强烈建议 WordPress 官方将下一次升级中把这个兼容问题考虑进去。

  1. 我也还没有升级,因为没有中文的,英文虽然也会看个大概了,但是还是不想升,我等官方出中文再说,小白鼠死的惨,尤其我们不懂得。

  2. 从皮肉折腾到骨子里去了。
    我用的是chrome,看到浏览器标题栏写着《欢迎逸林居士》,这效果.....还是不如显示日志标题的好啊。

  3. 我添加了这个函数,提交到官方了。但是不知道会不会被退回来。
    新改版之后主题审核速度异常缓慢……都3、4天了,没动静。

  4. 导航菜单是否只加一句代码下去就行呢?我在functions.php 里面加了,结果它后台还显示我主题不支持呢..搞到我想本地体验3.0的导航菜单都不行。私下教一下哈

  5. 床 沙发 椅子 凳子 都没了 所以我先看文章在回复!没想到我也用上了3.0主题 这里还要多多感谢万戈哒哒 :grin: 然后呢 顺便打个广告 新主题会在周一上线测试 届时希望更位客观能来我晒音乐多逛逛 有音乐的分享没音乐的聆听 发现BUG的就顺便提交一下 嘎嘎 :twisted: 谢过 ! :grin: