一个月前,应该是吧,记不清了,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 原创,转载请以链接形式标明本文地址!
博主给力...!!!!!!
有空用一下这个code.
@zigbee
看来你很忙啊。
@zwwooooo
主要是太懒惰啦。。。。。
还在用的插件搞定这个
@亿品元素
我也是插件,懒人
@亿品元素
插件简单
来看哈,好久没来了哩
如此复杂,我路过吧
我用的也是这个代码,倒没认真瞧过得到的都是哪些文章,改改去
@流年
嗯,很容易忽略
我记得我也改过这个东西来着..对比下看看..
@mice
可能你改正了
额、用的插件!
@优趣
插件方便
[...] 我参考了这篇文章《willin相关文章代码修正》,添加了一些符合当前主题lukoo的标记、在单篇日志显示“相关日志”的判断语句、修改成在没有相关标签日志和相关分类日志时显示“没有相关日志”。虽然它显得太长,但是还是有必要记录下来凑合着看。 [...]
对于插件我不懂 对于你们牛人我真是顶礼膜拜呀~
@球犯
别膜拜,互相学习就好
相关文章 不够时,能用 不重复的随机文章 补足不?
@Kars
可以吧,计数器上判断
@zwwooooo
http://arks.tk/73/wordpress-related-articles-code/
请过目、
@Kars
不错,哈
WordPress 相关文章代码 (修改自 willin 与 zwwooooo)...
在每篇文章页面,也就是 single.php 的下方 使用了 zwwooooo大酥 修改的 willin相关文章代码后,会出现一个问题:像我这个新开的博客时常会凑不齐 5篇相关文章,所以,就想用 随机文章来 进行补足、、 好了,全部代码如下: <h3>Related Posts</h3> <ul> <?php $post_num = 5; $exclude_id = $post->ID; $posttags = get_the_tags(); $i =...
能不能加进function,然后在边栏调用?
@zrqx008
可以,要改一下
发现这个代码对标签的获取还是很弱。
@zrqx008
只能基本实现
奇怪了,本地测试还是不行呀。还是获取当前分类下的最新文章。而且你的好像也不行呀。
@酷剑
检查细节(如文章同标签的文章有没有等),很多朋友直接copy是ok的
[...] 以下两段相关文章显示代码分别来自万戈和zww。 [...]
[...] 部分代码学习了《willin相关文章代码修正》,css样式自己设计。 [...]
看一个效果~
奇怪,为什么放在我本地测试的时候,没有文章的时候显示空白的,而且还是五条空白,有些文章还显示四条。。。
@Laycher
不太清楚你说的空白是指什么,这代码会先找同标签的文章,如果数量不够才会找同分类的文章补齐
@zwwooooo
我明白了,the_title是获取不了了,用get_the_title才能获取。
这段代码是目前网络上搜集到的比较强大的 果断拿走了