willin相关文章代码修正

一个月前,应该是吧,记不清了,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>&#9829; <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>&#9829; <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
or
oooo

“willin相关文章代码修正”有149条评论

  1. creolophis says:

    建站小菜鸟,各种来学习~~ :lol:

  2. Leo.N says:

    今天正过来找这段代码呢,没想到还碰上更新了~

    1. zwwooooo says:

      @Leo.N
      厄,你又好久没更新博客了。。。

  3. Kars says:

    偶用的 是 水煮鱼 的 相关文章 的 插件、、我也去 换个 玩玩~ :mrgreen:

    1. zwwooooo says:

      @Kars
      插件的话有很多

  4. 苏扬 says:

    用的还行吧,不过样式太单调,我现在的话自己加了一个背景,感觉还不错,不知大神什么意见?

    1. zwwooooo says:

      @苏扬
      样式自己折腾去,这里只说代码。

    2. zwwooooo says:

      @苏扬
      加了那个背景明朗多了,所以群众的力量是很厉害的。 :mrgreen:

  5. heson says:

    好东西!!~~但是我没用这个代码`` :oops:

    1. zwwooooo says:

      @heson
      用时再cp

  6. 囧啊囧 says:

    没用到这个代码,用的插件。

    1. zwwooooo says:

      @囧啊囧
      插件简单好用,哈

  7. Tiger says:

    没看懂,到底是啥子意思!!?

    1. zwwooooo says:

      @Tiger
      那就飘吧

  8. 不羡鱼 says:

    我再给你加一条评论吧,不要回复得手酸呀 :grin:
    代码高亮还是很美观!

    1. zwwooooo says:

      @不羡鱼
      这。。。如果一天回复2次就不会,如果一天没回复,第二天就手酸了

  9. 砼砼 says:

    代码收了

  10. 搓板 says:

    这个好啊... 我也很想搞一个. 我把你这个收藏了.

    1. zwwooooo says:

      @搓板
      CP就行了

    2. 搓板 says:

      @zwwooooo
      等我把我的top10搞定 我试试.

    3. zwwooooo says:

      @搓板
      貌似还没搞好

    4. 搓板 says:

      @zwwooooo
      貌似复制进去 只有最新的文章. 只显示5篇.

    5. zwwooooo says:

      @搓板
      你复制到哪里啊?这个是文章页面用的。

    6. 搓板 says:

      @zwwooooo
      我以为是sidebar呢. 汗....
      我现在试试.

    7. zwwooooo says:

      @搓板
      sidebar也可以,就是只让它在single页面显示就行了,呵呵

    8. zwwooooo says:

      @搓板
      哦,可能要稍微修改,还是文章里面吧,哈

  11. 猪八戒 says:

    等我学会了代码再来烟酒。

  12. 到现在我都还没把相关内容弄上去。用TAG,有些我根本没设置TAG,都空的。

    1. zwwooooo says:

      @第六空间
      空的会自动用分类补足

  13. 收藏下,留着以后用

  14. 小邪 says:

    $tag->term_id ╮(╯▽╰)╭。。。。。突然忘记想说啥了 - -

  15. socekin says:

    我总是喜欢z大的修改版,nice

    1. zwwooooo says:

      @socekin
      荒淫CP使用

  16. wmtimes says:

    相关文章,这是一段很有用的代码。

  17. 小王子 says:

    你也是大师。

    1. zwwooooo says:

      @小王子
      Copy大湿。。。

  18. 厉害,我暂时不想折腾

  19. 博主给力...!!!!!!

  20. zigbee says:

    有空用一下这个code. :razz:

    1. zwwooooo says:

      @zigbee
      看来你很忙啊。

    2. zigbee says:

      @zwwooooo
      主要是太懒惰啦。。。。。

发表评论

昵称 *

网址

B em del U Link Code Quote