某些主题在 WP 3.0 无法调用分类名称的原因及解决方法

由于多方面原因,比较忙乱。很久没更新过博客,也没关注WordPress的动态。
近日出差归来,主题iNews-v2的留言中看到网友反映在WP 3.0以上版本出现异常。
经尝试,确实存在“无法调用分类名称”的问题。原本的效果是这样的:

cat-title

这亦是大家比较熟悉常见的CMS类栏目元素构成:分类名称、分类文章列表、更多。

但在WordPress 3.0.x 版本中,iNews-v2(及其它某些主题)无法自动调用分类名称。
即是:上图中的红圈圈位置不会自动显示分类名称。

原因所在:函数 single_cat_title 在 3.0 已有变化

遇到这个问题的主要是某些(只是某些)“CMS”类主题,由于栏目位置需要自动调用分类名称,而使用了 single_cat_title 函数。通过对比 wordpress 2.9 和 3.0 的 \wp-includes\general-template.php 文件,发现该函数已有变化。

具体可参考IT樵客的这篇《wordpress升级到3.0首页调用single_cat_title()不显示的问题

为什么某些“CMS主题”不会出现这个问题?

目前存在的“CMS主题”,国内的作者比较习惯那种常规的栏目式(类似上面的截图),但对于其中的显示“分类名称”,大多是采用了两种不同的方法:

1)某些主题,使用前需要手动编辑填写分类名称,不调用 single_cat_title 函数。这种当然不会遇到本文提及的现象,分类名称是通过录入的文本而显示的。
使用这种方式的主题有:wp-cmsTechtrack、……

2)某些主题,通过分类的ID自动调用分类名称,需要使用 single_cat_title 函数。这类主题的用户,当wordpress升级到3.0.x,由于 single_cat_title 函数无法正常调用,就出现栏目位置不显示分类名称的现象。
使用这种方式的主题有:iNews-v2/v1BBtheme CMSWPYOU CMS、……

呵呵,在此顺便讲几句:当您使用某款主题遇到问题时,通常没必要抱怨,更不必责备作者如何如何,什么事情都是有原因的,方式不同、情况不同、……

有没有什么函数可替代 single_cat_title ?

根据以往印象,如果wordpress升级改变了某些函数在主题中不适合继续使用,那么会放出新的函数取而代之,但目前还没发现。

虽然single_cat_title有两项参数可设置,但并不能解决这个调用问题。

另外,在WordPress讨论区其实也有很多关于这个问题的帖子,
例如:Problem with single_cat_title after 3.0 upgrade, NOT resolved.
其中提到些方法,不过比较无奈,我尝试过但并不能解决iNews-v2等主题的问题。

如果解决“无法调用分类名称”的问题?

方法一:无法调用,那就干脆不要调用

正如网友印客诚品所讲的“我升级了3.01还是没的办法调用分类栏目标题,只有自己在代码里面填写标题冒充”,通过自己编辑修改原主题的代码,把自动调用相关的代码替换成文本。这个方法对于 iNews-v2/v1、BBtheme CMS、WPYOU CMS 等等主题都适用,但修改的难易程度不同,需要有相应的动手能力。

优:一了百了,不用修改系统文件。
弊:有可能要拆分原有代码(化简为繁),有可能需要动手能力较强。
前提条件:如果网站规划的分类已经完善,以后不需要再修改。

方法二:修改 single_cat_title 函数

先找到并开启准备编辑 ...\wp-includes\general-template.php 文件;
搜索 function single_cat_title 找到函数位置(3.0.1的在第687行);
用 wordpress 2.9 (或以前版本) 的这段函数代码,替换现在的那段……

function single_cat_title($prefix = '', $display = true ) {
$cat = intval( get_query_var('cat') );
if ( !empty($cat) && !(strtoupper($cat) == 'ALL') ) {
$my_cat_name = apply_filters('single_cat_title', get_the_category_by_ID($cat));
if ( !empty($my_cat_name) ) {
if ( $display )
echo $prefix.strip_tags($my_cat_name);
else
return strip_tags($my_cat_name);
}
} else if ( is_tag() ) {
return single_tag_title($prefix, $display);
}
}

优:很简便,易操作。
弊:以后升级时有可能仍需修改(或许以后有可能会有新的函数)
温馨提示:修改前记得先备份一下原文件。

个人比较推荐方法二,临时的简单解决一下,易操作,不用大动干戈。

暂写这些了,如果哪位朋友知道更好的解决方法,请分享一下,谢谢!

本文现有 65 条评论:

  1. RUNNER说道:

    使用了37楼的方法,解决问题,可正常浏览http://runner0324.com;

    修改$wp_query->is_category = false成$wp_query->is_category = true即可,共四处.

  2. 摘虚茧说道:

    37楼的方法,博主的方法都试过了,无用,3.0.1版本的,都想换主题了。

  3. 京沪高铁说道:

    $wp_query->is_category = true即可

  4. 我刚才还担心我的3.02会不会出问题呢

  5. wo不再胡来L说道:

    哎,我搞了好久还是没搞懂,分类中的3、6、7就是调用不出来

  6. wo不再胡来L说道:

    搞好了,就是突然发现了真实的原因,就是ID分类3、6、7是空白,我将3、6、7分别改成13、14、15就都显示出来了,可是我明明只有12个分类目录,⊙﹏⊙b汗一个

  7. 股市茶楼说道:

    此款主题的忠实爱好者!用了两三年了!
    不管什么问题基本都解决了。。。现在发现该主题存在一个问题。。。不知何解...

    换到新的VPS上测试结果是:自带主题各个页面打开都很快,但是用这款主题非常慢。。。只有在150MB+的数据库,没什么流量访问的情况下出现的

    不知道是不是里面有一些代码过旧还是怎么的?

    还想继续用下来。。。不知道老板有时间是否可以优化一下。。。

发表评论

8 x 6 =