2012年05月24日 41条评论

WordPress 函数 get_term_link 的参数问题

最近帮一个朋友写企业类主题,需要对产品设定一个专门的 post type 名叫 product,为了管理方便性,我对 product 设置了专门的分类类型和标签类型,分类类型为 product_cat(WordPress 本身的分类类型为 category)。

为何要用 get_term_link?

新类型的分类是无法用 <?php echo get_category_link( $category_id ); ?> 输出分类链接地址的,需要用 get_term_link() 函数,此函数用法如下:

<?php get_term_link( $term, $taxonomy ); ?>

具体参考 WordPress Codex:http://codex.wordpress.org/Function_Reference/get_term_link

问题

举个例:

- 自定义分类ID的变量为 $term,$term 是根据后台设置而改变的,为了方便说明,这里假定后台参数为 $custom_term = 8
- 我要获取自定义分类ID为 $term 的分类链接地址,那么按照官方说明应该是:

<?php
$term = $custom_term;
echo get_term_link( $term, 'product_cat' );
?>

看似没错,但问题来了,这样会返回错误:

Catchable fatal error: Object of class WP_Error could not be converted to string in...

没错啊,直接用 echo $term; 输出结果的确是 8,这就让人郁闷了……

不过如果你直接这样:

<?php echo get_term_link( 8, 'product_cat' ); ?>

又能正常工作。

解决方法

在 WordPress Codex 打转时,无意中看到国外朋友也碰到这个问题,然后他自己解决了,顿悟……传送门 》

原来是变量类型问题,这 get_term_link 函数和其它常用的 WordPress 函数不同,不会自己转换变量类型,你得先把字符类转换为整数才能正常工作,好Orz的函数!

下面这样就能正常工作:
坐在沙发上的Bolo:intval($term, 10)会更好,不然$term值太大的时候会有进制转换问题,要么就用(int)$term)

<?php
$term = $custom_term;
echo get_term_link( intval($term), 'product_cat' );
?>

所以,以后遇到类似这郁闷的函数,就要考虑是不是变量数据类型问题了。

折腾玩(完)。

zww
or
oooo

“WordPress 函数 get_term_link 的参数问题”有41条评论

  1. Bolo says:

    intval($term, 10)会更好,不然$term值太大的时候会有进制转换问题,要么就用(int)$term

    1. zwwooooo says:

      @Bolo
      感谢提醒,木有系统去学php就是这样乱用了

  2. 咚门 says:

    你在外面学习,我们在你这学习。。

    1. zwwooooo says:

      @咚门
      大家都在互联网下学习,哈

  3. 新号外 says:

    有时候遇到这种问题,还真不好找原因,弱类型语言,调试起来也比较麻烦。

    1. zwwooooo says:

      @新号外
      主要是官方说明也不详细,总不能老是去看源码吧

  4. airoschou says:

    请问新建立的分类在后台如何添加分类内容?

    1. zwwooooo says:

      @airoschou
      新建立的分类会有菜单的,除非你定义成隐藏。

  5. 看得有点似懂非懂,有空在本机上做做测试,网站上线后基本没摸过代码了。。。

    1. zwwooooo says:

      @就要去海淘
      有需要才去折腾

  6. axiu says:

    时常整理是好事啊

    1. zwwooooo says:

      @axiu
      这次遇到的问题真多,总算忙完了,Orz

  7. 疯子 says:

    wp的函数挺多的。经常需要看文档的。

    1. zwwooooo says:

      @疯子
      对啊,谁记得了那么多

  8. 话说这个错误提示和Java挺像的,提看就是数据类型转换问题了

    1. zwwooooo says:

      @混乱羽翼
      哈,官方文档没说详细

  9. 郑永 says:

    玩法不同,哈哈。

  10. 郑永 says:

    有没有想过出 html5主题,我最近一直想,所以才想到本地调试的,但是总觉得自己做出来的效果又累,到最后又达不到自己的要求。

    1. zwwooooo says:

      @郑永
      懒得学,目前不是主流。最多也就转换下,但总觉得是多余的。如果你想面对手机,可以搞一下。

    2. 郑永 says:

      @zwwooooo
      你说的对,哈哈,有些网站设计者会追求时尚,不过貌似你说的没错,目前感觉是多余的,为什么一定要那样做。

    3. 郑永 says:

      @zwwooooo
      说错了, 是追求前线。呵呵

    4. zwwooooo says:

      @郑永
      可以尝试,但不必特意追求,我个人觉得。

  11. 1niuhuifei says:

    很多文档内容只是要用的时候才去搜索它。

    1. zwwooooo says:

      @niuhuifei
      当然,谁会特意去记住呢?又不是国内教育。

  12. Firm says:

    好吧,就算你讲解得这么详细,我也是似懂非懂。

    1. zwwooooo says:

      @Firm
      因为你不需要,所以无需了解。

  13. 低调路过,是懂非懂

  14. huangjun says:

    感觉你每天花了好多时间在研究wp啊!

    1. zwwooooo says:

      @huangjun
      为什么你会说每天呢?每天大量生活琐事,有孩子的你懂的。

  15. 让你焦头烂额的事情我也用不到,不操心了

    1. zwwooooo says:

      @平板电脑推荐
      哈哈,用不到无需折腾

  16. 小邪 says:

    之前也碰到过这个问题,不过想了办法绕过了就木有管了,不过问题留着肯定会出事的,多谢大叔讲解。=w=

    1. zwwooooo says:

      @小邪
      其实我觉得WP Codex太不负责任了。

    2. 小邪 says:

      @zwwooooo
      是的,好多地方不对头,以后留意一下记录下来。

    3. zwwooooo says:

      @小邪
      真不明白WP为何不完善这些文档,故意的?

  17. lzjygn says:

    我只看看,我不说话。

  18. NONO says:

    上次我弄这个链接 弄了好久都弄不起来

  19. tiancool says:

    请教,自定义了分类类型:如国家,在后台新建分类名称:中国,美国,日本,印度,用什么函数在前台才能罗列出这些分类名称?

    1. zwwooooo says:

      @tiancool
      参考 wordpress “分类列表”函数吧,这些直接搜索就能找到答案,而且大量中文教程。

  20. 梯子铺 says:

    :mrgreen: 我曹好使,百度搜索get_term_link 第一个就是这个,我就纳闷了为啥明明好好的就是不显示。。

    1. zwwooooo says:

      @梯子铺 恭喜发财!新年快乐!
      解决就好。

发表评论

昵称 *

网址

B em del U Link Code Quote