Old

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

声明: 除非注明,ZWWoOoOo文章均为原创,转载请以链接形式标明本文地址
本文地址: http://zww.me/archives/25652

39 comments

  1. Bolo Bolo Google Chrome 19.0.1084.46 Google Chrome 19.0.1084.46 Mac OS X  10.7.4 Mac OS X 10.7.4

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

    沙发
    • zwwooooo zwwooooo Firefox 12.0 Firefox 12.0 Windows 7 x64 Edition Windows 7 x64 Edition

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

  2. 咚门 咚门 Google Chrome 19.0.1084.46 Google Chrome 19.0.1084.46 Windows 7 Windows 7

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

    板凳
  3. 新号外 新号外 Firefox 12.0 Firefox 12.0 Windows XP Windows XP

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

    地板
    • zwwooooo zwwooooo Firefox 12.0 Firefox 12.0 Windows 7 x64 Edition Windows 7 x64 Edition

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

  4. airoschou airoschou Google Chrome 19.0.1084.52 Google Chrome 19.0.1084.52 Windows XP Windows XP

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

    4楼
    • zwwooooo zwwooooo Firefox 12.0 Firefox 12.0 Windows 7 x64 Edition Windows 7 x64 Edition

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

  5. 就要去海淘 就要去海淘 Internet Explorer 8.0 (Compatibility Mode) Internet Explorer 8.0 (Compatibility Mode) Windows XP Windows XP

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

    5楼
  6. axiu axiu Google Chrome 19.0.1084.46 Google Chrome 19.0.1084.46 Windows 7 Windows 7

    时常整理是好事啊

    6楼
    • zwwooooo zwwooooo Firefox 12.0 Firefox 12.0 Windows 7 x64 Edition Windows 7 x64 Edition

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

  7. 疯子 疯子 Internet Explorer 9.0 Internet Explorer 9.0 Windows 7 Windows 7

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

    7楼
  8. 混乱羽翼 混乱羽翼 Google Chrome 17.0.963.83 Google Chrome 17.0.963.83 Windows 7 Windows 7

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

    8楼
  9. 郑永 郑永 Google Chrome 18.0.1025.162 Google Chrome 18.0.1025.162 Windows XP Windows XP

    玩法不同,哈哈。

    9楼
  10. 郑永 郑永 Firefox 12.0 Firefox 12.0 Windows XP Windows XP

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

    10楼
    • zwwooooo zwwooooo Firefox 12.0 Firefox 12.0 Windows 7 x64 Edition Windows 7 x64 Edition

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

    • 郑永 郑永 Google Chrome 19.0.1084.46 Google Chrome 19.0.1084.46 Windows XP Windows XP

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

    • 郑永 郑永 Google Chrome 19.0.1084.46 Google Chrome 19.0.1084.46 Windows XP Windows XP

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

    • zwwooooo zwwooooo Firefox 12.0 Firefox 12.0 Windows 7 x64 Edition Windows 7 x64 Edition

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

  11. niuhuifei niuhuifei Google Chrome 19.0.1084.52 Google Chrome 19.0.1084.52 GNU/Linux GNU/Linux

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

    11楼
    • zwwooooo zwwooooo Firefox 12.0 Firefox 12.0 Windows 7 x64 Edition Windows 7 x64 Edition

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

  12. Firm Firm Google Chrome 17.0.963.56 Google Chrome 17.0.963.56 Windows XP Windows XP

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

    12楼
    • zwwooooo zwwooooo Firefox 12.0 Firefox 12.0 Windows 7 x64 Edition Windows 7 x64 Edition

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

  13. 哥特复兴 哥特复兴 Google Chrome 19.0.1084.46 Google Chrome 19.0.1084.46 Windows 7 Windows 7

    低调路过,是懂非懂

    13楼
  14. huangjun huangjun Maxthon 2.0 Maxthon 2.0 Windows XP Windows XP

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

    14楼
    • zwwooooo zwwooooo Firefox 12.0 Firefox 12.0 Windows 7 x64 Edition Windows 7 x64 Edition

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

  15. 平板电脑推荐 平板电脑推荐 Firefox 12.0 Firefox 12.0 Windows 7 x64 Edition Windows 7 x64 Edition

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

    15楼
  16. 小邪 小邪 Google Chrome 19.0.1084.46 Google Chrome 19.0.1084.46 Mac OS X  10.7.4 Mac OS X 10.7.4

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

    16楼
    • zwwooooo zwwooooo SRWare Iron 18.0.1050.1 SRWare Iron 18.0.1050.1 Windows 7 x64 Edition Windows 7 x64 Edition

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

    • 小邪 小邪 Google Chrome 19.0.1084.52 Google Chrome 19.0.1084.52 Windows 7 x64 Edition Windows 7 x64 Edition

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

    • zwwooooo zwwooooo Firefox 12.0 Firefox 12.0 Windows 7 x64 Edition Windows 7 x64 Edition

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

  17. lzjygn lzjygn Firefox 12.0 Firefox 12.0 Windows XP Windows XP

    我只看看,我不说话。

    17楼
  18. NONO NONO Google Chrome 19.0.1084.52 Google Chrome 19.0.1084.52 Windows 8 Windows 8

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

    18楼
  19. tiancool tiancool Google Chrome 27.0.1453.110 Google Chrome 27.0.1453.110 Mac OS X  10.8.4 Mac OS X 10.8.4

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

    19楼
    • zwwooooo zwwooooo Firefox 21.0 Firefox 21.0 Windows 8 x64 Edition Windows 8 x64 Edition

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

Leave a Reply