2010年06月05日 73条评论

willin的相关文章代码

从网上搜来的相关文章代码有个弊病,就是代码放在网页某些地方(如放在文章内容后面)会搞乱 $post 的顺序,从而会影响一些如评论调用错乱的问题,我也因为此而一直用插件来实现这个功能。

低调高手 willin 在其文章《A9 主题的特色》里面贴出了 A9 主题所用的相关文章代码,代码由 willin 一手打造,很好用。

这段代码有2个与众不同的地方:
1. 先取每个 tags 的文章,当 tags 文章数量不足, 再取 category 补足。
2. 使用 $post 暂存, 代码放在网页任何地方都不不会搞乱 $post 顺序。

使用方法很简单,直接将下面的代码复制到需要使用的地方即可:

<h3>相关文章:</h3>
<ul>
<?php
$post_num = 5; // 设置相关文章数量.
global $post;
$tmp_post = $post;
$tags = ''; $i = 0; // 先取 tags 文章.
if ( get_the_tags( $post->ID ) ) {
foreach ( get_the_tags( $post->ID ) as $tag ) $tags .= $tag->name . ',';
$tags = strtr(rtrim($tags, ','), ' ', '-');
$myposts = get_posts('numberposts='.$post_num.'&tag='.$tags.'&exclude='.$post->ID);
foreach($myposts as $post) {
setup_postdata($post);
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
$i += 1;
}
}
if ( $i < $post_num ) { // tags 文章数量不足, 再取 category 补足.
$post = $tmp_post; setup_postdata($post);
$cats = ''; $post_num -= $i;
foreach ( get_the_category( $post->ID ) as $cat ) $cats .= $cat->cat_ID . ',';
$cats = strtr(rtrim($cats, ','), ' ', '-');
$myposts = get_posts('numberposts='.$post_num.'&category='.$cats.'&exclude='.$post->ID);
foreach($myposts as $post) {
setup_postdata($post);
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
}
}
$post = $tmp_post; setup_postdata($post);
?>
</ul>

贴完。

2010.6.6 Edit:

1. 评论中阿修kisa747指出“如果文章没有标签那么会出错”,这个问题阿修在评论里给出临时解决办法(已添加进上面的代码)【willin 已经修正】

2. 由于 willin 的源代码贴出错误,致使相关文章变成最新文章,我已经修正。

请在 2010.6.6 13:33 前 CP(Copy Paste) 代码的朋友重新 CP 使用。

2010.11.29 Update: 最新的代码请移步此 https://zww.me/archives/25353

zww
or
oooo

“willin的相关文章代码”有73条评论

  1. ifenwen says:

    也不知道自己用的谁的代码了

    1. zwwooooo says:

      @ifenwen 以前网上流行的相关文章代码有bug,这是willin自己敲的代码。

  2. winy says:

    我是都拿来参考,自己修改的合适

  3. Max Lee says:

    拿来试试,感谢分享~

    1. zwwooooo says:

      @Max Lee 荒淫使用

  4. TTkea says:

    技术文MK~~ :razz:

  5. jalena says:

    哇,IE6下评论框的位置和广告为有重叠哦!

    1. zwwooooo says:

      @jalena 已修正,谢谢指出

  6. A.shun says:

    我用的代码是直接从WordPress Related Posts中挖出来的

    1. zwwooooo says:

      @A.shun 哈哈,其实都差不多

  7. 包子 says:

    收藏一下.

  8. 阿修 says:

    发现个问题,如果文章没有标签,会报错的

    1. zwwooooo says:

      @阿修 呃,我看看

  9. 14行开始后面多了一个?

    1. zwwooooo says:

      @囧笑娱乐 哦,真是啊,我自个更正了,写文章时没更正。。。

  10. 集趣 says:

    是不是利用SQL也可以实现这样的效果呢?利用文章标题的相似度

    1. zwwooooo says:

      @集趣 可以吧,但我不会

  11. 阿邙 says:

    这个不错 呵呵 有没有合适的摘要代码分享下.

    1. zwwooooo says:

      @阿邙 没啊,你可以参考插件,呵呵

  12. 疾风 says:

    感觉我现在用的还凑合 就不换了~

    1. zwwooooo says:

      @疾风 好用即可

  13. Dianso says:

    用了,不过每个文章前都有个?

  14. Dianso says:

    好了,删除代码里2个问号就行了

    1. zwwooooo says:

      @Dianso 嗯,willin那里贴错了,我自个用的更正了,但我发文章时又copy willin的了,囧~

  15. 猪八戒 says:

    看不懂代码啊,什么时候能步入你们高手的行列呢?这样提示点广告不怕百度处罚呀?

    1. zwwooooo says:

      @猪八戒 你不说就可以了

  16. kisa747 says:

    这个代码自动补足分类下的文章比较好。

    1. zwwooooo says:

      @kisa747 嗯,这样就不会出现none

  17. mice says:

    o(︶︿︶)o 还是用插件好了,理解WP不够透彻慢慢折腾吧..

    1. zwwooooo says:

      @mice 插件简单方便易用

  18. kisa747 says:

    如果文章没有tags会报错,建议加个if (get_the_tags()) 先判断下

    1. 阿修 says:

      @kisa747 第八行的get_the_tags前面加个(array)就可以解决了。

    2. zwwooooo says:

      @阿修 先根据你的方法更正,貌似还有问题

    3. 阿修 says:

      @zwwooooo 其他问题得问作者本人啦~~ :grin:

  19. 友情支持~~

  20. 万戈 says:

    我用的就是这个方法耶,呵呵

    1. zwwooooo says:

      @万戈 呵呵,你的挺好的

回复给 zwwooooo ¬
取消回复

昵称 *

网址

B em del U Link Code Quote