Old

willin版相关文章代码写成函数

这个是一个朋友需要的,顺便贴出来。

对于熟悉php的盆友这很简单,但还是有很多盆友不懂的,但CP(CopyPaste)肯定懂……但……没有但了……

直接使用的代码可以到这里CP《willin的相关文章代码》(老代码)

或者去willin那里《A9 主题的特色

上面纯粹废话,目的是一定的文章长度才能配合好左边小张的广告图片,哇咔咔

好,废话完,正题!

把下面的代码扔进主题的 functions.php 里面:
2010.11.29 Update:下面这段代码有些小bug,具体移步到这里 http://zww.me/archives/25353 ,根据新的代码对比修正——替换第5行~11行相近的内容)

/* Related Posts 函数:出自kan.willin.org,函数修改zww.me */
function RelatedPosts($post_num = 5) { global $post;
	if(is_single()) {//只在文章页使用
		$related_posts = '<h3>Related Posts:</h3><ul>';
		$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);
		 while( have_posts() ) { the_post();
			$related_posts .= '<li><a href="'.get_permalink().'" title="'.get_the_title().'">'.get_the_title().'</a></li>';
			$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();
			$related_posts .= '<li><a href="'.get_permalink().'" title="'.get_the_title().'">'.get_the_title().'</a></li>';
		 } wp_reset_query();
		}
		$related_posts .= '</ul>';
		return $related_posts;
	}
}

然后用这个调用:

<?php if(function_exists('RelatedPosts')){RelatedPosts(5);} ?>

(里面的5就是显示相关的文章数量)

PS:其实那位折腾的朋友不是这样调用的,加了个自动插入相关文章到文章页面和feed输出代码,就是再把下面这段代码扔functions.php:

function insertfooter($content) {
	if( is_single() || is_feed()) {//文章页和feed输出
		$content.= RelatedPosts(5);//文章结尾插入相关文章
	}
	return $content;
}
add_filter ('the_content', 'insertfooter');

完了。- -

zww
or
oooo

声明: 除非注明,ZWWoOoOo文章均为原创,转载请以链接形式标明本文地址
本文地址: http://zww.me/archives/25294

80 comments

  1. A.shun A.shun

    华丽的沙发,不解释~ :razz:

    沙发
  2. BoKeam BoKeam

    有用。看一下 :razz:

    板凳
  3. A.shun A.shun

    @A.shun 错别字的沙发 :razz:
    om威武~

  4. ......
  5. 掌柜的马甲 掌柜的马甲

    直接代码的路过....

    21楼
  6. 园子 园子

    开始的话很多
    结尾来个急刹车
    哈哈。

    22楼
  7. 久酷 久酷

    貌似这样不带缓存功能,每打开一篇文章都要执行一次……除非装了生成静态页面的插件!

    23楼
  8. 球犯 球犯

    和《willin的相关文章代码》效果是一样的吗?

    24楼
  9. mice mice

    :mrgreen: zww千秋万载..你懂的..

    25楼
  10. Xshagua Xshagua

    暂时还不需要,主题自带

    26楼
  11. Timothy Timothy

    代码和插件,我还是偏向插件。这样以后升级wordpress的时候,不用手动去改funcions.php了……

    27楼
  12. 老饕 老饕

    add_filter~~最近用了这个钩子~~好用啊!

    28楼
  13. 书香阁 书香阁

    虽然不是很懂 支持下博主辛苦的分享精神

    29楼
  14. FORECE FORECE

    我直接用的水煮鱼的。。。

    30楼
  15. 疾风 疾风

    我的functions都很庞大了 呵呵

    31楼
  16. 郑永 郑永

    貌似能用到,我还在想为什么大家的feed里面都有相关文章,我的插件也应该支持这个啊。汗。现在还是用代码吧。

    32楼
  17. 亿品元素 亿品元素

    还是用插件来的方便

    33楼
  18. ylsnuha ylsnuha

    为什么调用不能用?。。。

    34楼
  19. ylsnuha ylsnuha

    请问怎么让相关日志和随机日志并排显示呢 具体的代码 比如我现在2个函数输出

    
    
    35楼
    • zwwooooo zwwooooo

      @ylsnuha
      用左右浮动呗。
      float:left;
      float:right;
      具体代码看我的博客文章末尾,用firebar看

  20. ylsnuha ylsnuha

    为什么我的相关文章总是包含原文章呢。。。
    那个 //單獨使用要開此行 那行开了也不行

    36楼
    • 浩子 浩子

      我也不行呢?
      也有原文章,怎么回事呢?

    • ylsnuha ylsnuha

      @浩子
      感觉好像是因为相关文章比较少才会出现的 如果有的相关程度比较高的就不会出现了 我貌似有的文章出现原文有的没有 可是怎么取消出现原文就不知道了

    • zwwooooo zwwooooo

      @ylsnuha
      这是willin写的,抽时间看看,貌似我的很少出现。

    • zwwooooo zwwooooo

      @浩子
      willin写的,具体得看看

  21. Kars Kars
    function related_posts() {
    global $post;
    $post_num = 5;
    $exclude_id = $post->ID;
    $posttags = get_the_tags(); $i = 0;
    $related_posts = "";
    if ( $posttags ) {
    	$tags = ''; foreach ( $posttags as $tag ) $tags .= $tag->term_id . ',';
    	$args = array(
    		'post_status' => 'publish',
    		'tag__in' => explode(',', $tags),
    		'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();
    		$related_posts .= '<li><a rel="bookmark" href="'.get_permalink().'" title="'.get_the_title().'">'.get_the_title().'</a></li>';
    		$exclude_id .= ',' . $post->ID; $i ++;
    	} wp_reset_query();
    }
    if ( $i < $post_num ) {
    	$cats = ''; foreach ( get_the_category() as $cat ) $cats .= $cat->cat_ID . ',';
    	$args = array(
    		'category__in' => explode(',', $cats),
    		'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(); 
    		$related_posts .= '<li><a rel="bookmark" href="'.get_permalink().'" title="'.get_the_title().'">'.get_the_title().'</a></li>';
    		$exclude_id .= ',' . $post->ID; $i ++;
    	} wp_reset_query();
    }
    if ( $i < $post_num ) {
    	$args = array(
    		'post__not_in' => explode(',', $exclude_id),
    		'caller_get_posts' => 1,
    		'orderby' => 'rand',
    		'posts_per_page' => $post_num - $i
    	);
    	query_posts($args);
    	while( have_posts() ) { the_post(); 
    		$related_posts .= '<li><a rel="bookmark" href="'.get_permalink().'" title="'.get_the_title().'">'.get_the_title().'</a></li>';
    		$exclude_id .= ',' . $post->ID; $i ++;
    	} wp_reset_query();
    }
    if ( $i  == 0 ) $related_posts .= '<li>No Related Articles!</li>';
    return $related_posts;
    }

    你漏了 global $post; ,会导致当前文章也被加入了相关文章里、、

    37楼
  22. Arks Absolute Area - trackback on 2011/02/12/ 23:32
    38楼
  23. 小黎的博客 小黎的博客

    谢谢指导., 我市直接贴进去的,没放functions.php里

    39楼

Leave a Reply