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. 阿修 says:

    啊啊啊

    1. MOPVHS says:

      @阿修
      全抢走了!!!

    2. @阿修
      全抢走了!!!

    3. 阿修 says:

      @MOPVHS
      :mrgreen: :mrgreen: 咩哈哈哈哈

    4. 阿修 says:

      @Weitian Zhao
      我想把你的3楼也抢走的

  2. 阿修 says:

    果断拿走用……

    1. zwwooooo says:

      @阿修
      今天我学你,抢了万戈的沙发!板凳!地板!地底!哇咔咔

  3. 抽空实践一下...
    现在在用无觅带插图的那个,每次都要跳转次无觅...好不爽

    1. zwwooooo says:

      @Weitian Zhao
      厄,带插图。。。其实可以自己写。。。

  4. 阿修 says:

    算了,地板也占了吧

    1. 阿修 says:

      @阿修
      失败了么?

  5. :eek: 第一次坐沙发啊 感谢Twitter :mrgreen:

    1. 阿修 says:

      @Weitian Zhao
      看错了喂……我是沙发

  6. MOPVHS says:

    哇...隔了一个月还能想起...

  7. winy says:

    好像我用了,这个细节真没发现

    1. zwwooooo says:

      @winy
      我也没注意。。。

  8. 虽然不懂PHP编程哈,但willin的博客也去转过,貌似有另外一个ID替维护博客

    1. zwwooooo says:

      @顺水横流
      貌似是他外甥维护

    2. @zwwooooo 哦?真的啊?这人倒真没研究过,呵呵,一看他就知道是个高手啊。他的站用的全是繁体中文,难道是台湾人??

    3. zwwooooo says:

      @顺水横流
      willin回台湾鸟。

    4. @zwwooooo
      哦,原来如此,国内好多玩WP的人,都用过他的代码,真的是很有想法的一个牛人

  9. 传说中的BUG被你们发现,并且被你们解决了,赞一把。

  10. 繁体中文????

    1. zwwooooo says:

      @混乱博客
      原作者willin是台湾人,注释还是保留

  11. 我的是用的插件实现的,呵呵

    1. zwwooooo says:

      @小杰博客
      插件就不需要这样折腾了,简单

  12. Mutnyy says:

    我刚找了一个插件,看来可以扔了 :mrgreen: ,Thanks!

    1. zwwooooo says:

      @Mutnyy
      这类插件本来就很多,这代码不是因为没插件而做出的,是因为不用插件而写的。哈哈

  13. A.shun says:

    我是bug发现帝 :lol: 你当修复帝就好~

    啦啦,更新代码去

    1. zwwooooo says:

      @A.shun
      间接成为我的“解决文囧”帝

  14. 阅微 says:

    A9可是款经典主题啊……呵呵、这个问题 :!: 去看看去……

    1. zwwooooo says:

      @阅微
      A9里面有很多willin折腾的代码

  15. 万戈 says:

    用我的相关文章吗,我的超正常 :mrgreen:

    1. 万戈 says:

      @万戈 用我的相关文章吧,我的超正常 :mrgreen:

    2. zwwooooo says:

      @万戈
      不正常我才能解决文囧

  16. timsoons says:

    我的相关文章也是用WILIAN的代码呢。谢谢呢,现在暂时没有时间修改网站了。先留着。 :razz:

  17. 唐人游博客活动 says:

    尊敬的博主,您好!现在有个针对每个wordpress主题的博主有奖博客征文活动!欢迎您报名参加:http://happy.uc55.com/www/bloger/

    打扰博主了!

    1. zwwooooo says:

      @唐人游博客活动
      我不会写那些比赛的文章。。。文笔不好

  18. 你是一个不错的 主题制作者 哈哈

  19. 我啥也不懂,我就看看。。。

  20. 丕子 says:

    你这里就是一些代码库 以后能用到 就搜索过来了

    1. 丕子 says:

      @丕子
      回复自己可以?

    2. zwwooooo says:

      @丕子
      没这么厉害吧,呵呵

    3. zwwooooo says:

      @丕子
      wp是可以的

发表评论

昵称 *

网址

B em del U Link Code Quote