几招搞定wordpress自由获取指定分类中的日志

get posts from specific category in wordpress
在利用wordpress制作CMS皮肤时,经常性地需要在页面某区块显示指定分类下的日志。
想实现这样的功能需求,可利用的方法有很多,包括query_posts函数、$wpdb全局变量、WP_Query类等等。
假设条件:以我的博客分类为例。
分类ID:61 分类名称:技术前端 需要获取10条记录
1、利用query_posts()函数
query_posts()是wordpress用来显示内容的最容易的方法之一,它可以通过各种灵活的方式检索或过滤你所需要的内容。

代码如下:

<?php
//The args
$args = 'cat=61&posts_per_page=10';

// The Query
query_posts( $args );

// The Loop
while ( have_posts() ) : the_post();
	echo '<li>';
	the_title();
	echo '</li>';
endwhile;

// Reset Query
wp_reset_query();

?>

简单吧,这样就可以实现自由调用指定分类下的日志了。query_posts函数虽好用,但在使用该函数时,我们仍需要注意和尽量减少使用该函数的频率。具体说明可以参考wordpress啦!中有关这方面的说明。
同时,在官方文档中,这样强调:“如果我们不得不用到query_posts(),必须确保每次使用query_posts()后同时执行wp_reset_query();”。这就是为什么我在上面的代码中加上了wp_reset_query()的原因。

另外,大多数使用wordpress的朋友们,可能都对wp-pagenavi这个插件不再陌生。这是作为辅助分页的插件成为很多wper的常用工具之一。其作者在自己的博客中,分析并强调了部分朋友在分页时会出现数据差异情况的原因,并提出了正确使用query_posts()函数的方法。具体可移步至”Right Way to Use Query Posts

综合以上几点,加上易维护性的目的,我们重新来理一下代码:

<?php
	//The args
	$args = array(
		'cat'	=> 61,
		'posts_per_page'	=> 10,
		'paged'				=> get_query_var('page') //如果需要分页,则加上这一句
	);

	// The Query
	query_posts( $args );

	// The Loop
	while ( have_posts() ) : the_post();
		echo '<li>';
		the_title();
		echo '</li>';
	endwhile;

	// Reset Query
	wp_reset_query();

?>

2、WP_Query类
WP_Query类被设定用来处理wordpress众多复杂的数据库处理,未来一段时间都将被提倡的使用方法之一。
按我个人的习惯和对wordpress的浅显认识,建议放弃烂用query_posts(),而改用WP_Query().尽管看上去有一点点烦。
仍以上面的需求为例,列代码如下:

<?php
	//The args
	$args = array(
		'cat'	=> 61,
		'posts_per_page'	=> 10,
	);

	// The Result
	$tech = new WP_Query( $args );

	if ( $tech -> have_posts() ) {

		// The Loop
		while ( $tech -> have_posts() ) : $tech ->the_post();
			echo '<li>';
			the_title();
			echo '</li>';
		endwhile;

	}else {
		echo 'no posts in current category!';
	}

?>

 

代码略加完善;不难看出,这样独立来调用数据,即安全易维护,又比较明晰;

以上两种方式中,$args所具有的内定参数,包括category__in, category__not_in, post__in, post__not_in等等可以至官方文档,作进一步了解:http://codex.wordpress.org/Class_Reference/WP_Query#Parameters

3、$wpdb全局变量
$wpdb作为wordpress数据库类的引用,是无论皮肤制作或插件开发人员必须要强加掌握的内容之一。在Smashing Magazine中,”WordPress Essentials: Interacting With The WordPress Database“重点讲解了有关$wpdb的几点应用;
有了Daniel Pataki的讲解,作为一个业余爱好者,也有种蠢蠢欲动的冲动了。示例代码:

<?php

	$tech_posts = $wpdb->get_results( 
		SELECT DISTINCT		$wpdb->posts.*
		FROM				$wpdb->posts
		INNER JOIN			$wpdb->term_relationships
							ON $wpdb->posts.ID = $wpdb->term_relationships.object_id
		WHERE				$wpdb->term_relationships.term_taxonomy_id IN (61)
		ORDER BY			$wpdb->posts.post_date DESC
		LIMIT				0,10
	); 

	if ( $tech_posts ) :
		foreach( $tech_posts as $key => $tech ) {
			echo '<li>';
			echo $tech->post_title;
			echo '</li>';			
		}
	endif;

?>

有点复杂吧?加油,好好研究研究先~

参考:

http://fairyfish.net/m/how-to-display-posts-from-a-certain-category/

http://codex.wordpress.org/Function_Reference/query_posts

http://codex.wordpress.org/Class_Reference/WP_Query#Parameters

http://scribu.net/wordpress/wp-pagenavi/right-way-to-use-query_posts.html

http://wp.smashingmagazine.com/2011/09/21/interacting-with-the-wordpress-database/

http://www.wordpress.la/query_posts_tips

2 thoughts on “几招搞定wordpress自由获取指定分类中的日志”

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注