一个月前,应该是吧,记不清了,a.shun 就跟我说过 willin 的相关代码有问题,老是出现当前文章本身,因为忙我就一直没去分析代码。
直到昨晚,我在回复评论时看到自己博客的相关文章才突然想起,于是分析了代码一下,a.shun 所说的问题很容易解决,就是去掉下面 willin 相关文章代码里面第 5 行的注释即可——即去掉前面的 2 条斜杠。
如下面 willin 相关文章原代码(提取自 A9 主题),把下面的 //$exclude_id = $post->ID; // 單獨使用要開此行
改为 $exclude_id = $post->ID; // 單獨使用要開此行
<h3>Related Posts</h3> <ul> <?php $post_num = 5; // 數量設定. //$exclude_id = $post->ID; // 單獨使用要開此行 $posttags = get_the_tags(); $i = 0; if ( $posttags ) { $tags = ''; foreach ( $posttags as $tag ) $tags .= $tag->name . ','; $args = array( 'post_status' => 'publish', 'tag_slug__in' => explode(',', $tags), // 只選 tags 的文章. 'post__not_in' => explode(',', $exclude_id), // 排除已出現過的文章. 'caller_get_posts' => 1, // 排除置頂文章. 'orderby' => 'comment_date', // 依評論日期排序. 'posts_per_page' => $post_num ); query_posts($args); // query_posts() since 2.0.0 /wp-includes/classes.php while( have_posts() ) { the_post(); ?> <li>♥ <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php $exclude_id .= ',' . $post->ID; $i ++; } wp_reset_query(); } if ( $i < $post_num ) { // 當 tags 文章數量不足, 再取 category 補足. $cats = ''; foreach ( get_the_category() as $cat ) $cats .= $cat->cat_ID . ','; $args = array( 'category__in' => explode(',', $cats), // 只選 category 的文章. 'post__not_in' => explode(',', $exclude_id), 'caller_get_posts' => 1, 'orderby' => 'comment_date', 'posts_per_page' => $post_num - $i ); query_posts($args); while( have_posts() ) { the_post(); ?> <li>♥ <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php $i ++; } wp_reset_query(); } if ( $i == 0 ) echo '<li>尚無相關文章</li>'; ?> </ul>
本来这样就解决了,但随即 a.shun 又发现貌似我博客的都是取得同分类的文章,而不是先取得同标签的文章。
于是我又重新分析代码,发现我的博客文章中文标签名的取不到相关文章,但英文标签的文章就能取到相关文章,看来代码问题出在标签(tag)的获取上。
经过细心发现,willin 忘了考虑中文博客很多标签名和标签的别名(slug)是不同的,而代码取得的是当前文章的标签名,而获取相关文章的代码用的是别名(slug),所以才会出现有些标签的文章不能获取相关文章。(这段很拗口。。。看得懂的看看,看不懂就飘吧。)
下面是我纠正后的代码,具体效果看我博客文章后面的相关文章。
(2010.11.30 Update: 漏了个$i++和忘了去掉文章标题截取,请Copy过[2010.11.30前]的朋友重新Copy)
<h3>Related Posts</h3> <ul> <?php $post_num = 5; // 數量設定. $exclude_id = $post->ID; // 單獨使用要開此行 //zww: edit $posttags = get_the_tags(); $i = 0; if ( $posttags ) { $tags = ''; foreach ( $posttags as $tag ) $tags .= $tag->term_id . ','; //zww: edit $args = array( 'post_status' => 'publish', 'tag__in' => explode(',', $tags), // 只選 tags 的文章. //zww: edit 'post__not_in' => explode(',', $exclude_id), // 排除已出現過的文章. 'caller_get_posts' => 1, 'orderby' => 'comment_date', // 依評論日期排序. 'posts_per_page' => $post_num ); query_posts($args); while( have_posts() ) { the_post(); ?> <li><a rel="bookmark" href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></li> <?php $exclude_id .= ',' . $post->ID; $i ++; } wp_reset_query(); } if ( $i < $post_num ) { // 當 tags 文章數量不足, 再取 category 補足. $cats = ''; foreach ( get_the_category() as $cat ) $cats .= $cat->cat_ID . ','; $args = array( 'category__in' => explode(',', $cats), // 只選 category 的文章. 'post__not_in' => explode(',', $exclude_id), 'caller_get_posts' => 1, 'orderby' => 'comment_date', 'posts_per_page' => $post_num - $i ); query_posts($args); while( have_posts() ) { the_post(); ?> <li><a rel="bookmark" href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php $i++; } wp_reset_query(); } if ( $i == 0 ) echo '<li>没有相关文章!</li>'; ?> </ul>
有用这段代码的朋友自己纠正吧,willin 那里我也通知了,不过他退隐“博湖”好一段时间了,期待他的复出。
zww
赏
oooo
or
- 本文标题:willin相关文章代码修正
- 本文链接:https://zww.me/archives/25353
- 发布时间:2010年11月29日 10:18
- 版权声明:除非注明,文章均为 zwwooooo 原创,转载请以链接形式标明本文地址!
啊啊啊
@阿修
全抢走了!!!
@阿修
全抢走了!!!
@MOPVHS
咩哈哈哈哈
@Weitian Zhao
我想把你的3楼也抢走的
果断拿走用……
@阿修
坏淫
@阿修
今天我学你,抢了万戈的沙发!板凳!地板!地底!哇咔咔
抽空实践一下...
现在在用无觅带插图的那个,每次都要跳转次无觅...好不爽
@Weitian Zhao
厄,带插图。。。其实可以自己写。。。
算了,地板也占了吧
@阿修
失败了么?
第一次坐沙发啊 感谢Twitter
@Weitian Zhao
看错了喂……我是沙发
哇...隔了一个月还能想起...
好像我用了,这个细节真没发现
@winy
我也没注意。。。
虽然不懂PHP编程哈,但willin的博客也去转过,貌似有另外一个ID替维护博客
@顺水横流
貌似是他外甥维护
@zwwooooo 哦?真的啊?这人倒真没研究过,呵呵,一看他就知道是个高手啊。他的站用的全是繁体中文,难道是台湾人??
@顺水横流
willin回台湾鸟。
@zwwooooo
哦,原来如此,国内好多玩WP的人,都用过他的代码,真的是很有想法的一个牛人
传说中的BUG被你们发现,并且被你们解决了,赞一把。
@世纪之光
。。。
繁体中文????
@混乱博客
原作者willin是台湾人,注释还是保留
我的是用的插件实现的,呵呵
@小杰博客
插件就不需要这样折腾了,简单
我刚找了一个插件,看来可以扔了 ,Thanks!
@Mutnyy
这类插件本来就很多,这代码不是因为没插件而做出的,是因为不用插件而写的。哈哈
我是bug发现帝 你当修复帝就好~
啦啦,更新代码去
@A.shun
间接成为我的“解决文囧”帝
A9可是款经典主题啊……呵呵、这个问题 去看看去……
@阅微
A9里面有很多willin折腾的代码
用我的相关文章吗,我的超正常
@万戈 用我的相关文章吧,我的超正常
@万戈
不正常我才能解决文囧
我的相关文章也是用WILIAN的代码呢。谢谢呢,现在暂时没有时间修改网站了。先留着。
尊敬的博主,您好!现在有个针对每个wordpress主题的博主有奖博客征文活动!欢迎您报名参加:http://happy.uc55.com/www/bloger/
打扰博主了!
@唐人游博客活动
我不会写那些比赛的文章。。。文笔不好
你是一个不错的 主题制作者 哈哈
我啥也不懂,我就看看。。。
@一世年华
荒淫围观
你这里就是一些代码库 以后能用到 就搜索过来了
@丕子
回复自己可以?
@丕子
没这么厉害吧,呵呵
@丕子
wp是可以的