WordPress函数:get_posts 查询一组文章的好方法

追格官方小助手/ 2022年12月22日/ WordPress/ 浏览 1001

之前,我们曾经花了很大的功夫学习 WP_Query:《WordPress自定义查询WP_Query参数使用方法大全》。今天学习的函数 get_posts 对于WP_Query 的参数都是支持的。


看一下 get_posts 的源代码就清楚了:


function get_posts( $args = null ) {
	$defaults = array(
		'numberposts'      => 5,
		'category'         => 0,
		'orderby'          => 'date',
		'order'            => 'DESC',
		'include'          => array(),
		'exclude'          => array(),
		'meta_key'         => '',
		'meta_value'       => '',
		'post_type'        => 'post',
		'suppress_filters' => true,
	);

	$parsed_args = wp_parse_args( $args, $defaults );
	if ( empty( $parsed_args['post_status'] ) ) {
		$parsed_args['post_status'] = ( 'attachment' === $parsed_args['post_type'] ) ? 'inherit' : 'publish';
	}
	if ( ! empty( $parsed_args['numberposts'] ) && empty( $parsed_args['posts_per_page'] ) ) {
		$parsed_args['posts_per_page'] = $parsed_args['numberposts'];
	}
	if ( ! empty( $parsed_args['category'] ) ) {
		$parsed_args['cat'] = $parsed_args['category'];
	}
	if ( ! empty( $parsed_args['include'] ) ) {
		$incposts                      = wp_parse_id_list( $parsed_args['include'] );
		$parsed_args['posts_per_page'] = count( $incposts );  // Only the number of posts included.
		$parsed_args['post__in']       = $incposts;
	} elseif ( ! empty( $parsed_args['exclude'] ) ) {
		$parsed_args['post__not_in'] = wp_parse_id_list( $parsed_args['exclude'] );
	}

	$parsed_args['ignore_sticky_posts'] = true;
	$parsed_args['no_found_rows']       = true;

	$get_posts = new WP_Query;
	return $get_posts->query( $parsed_args );
}


get_posts 是一个语法糖,完全就是对 WP_Query 的包装。不过,get_posts 也不仅仅是一个语法糖。WP_Query 是可以重复利用,执行多次查询的。get_posts 每次执行都会新建一个 WP_Query,两次执行之间是完全没关系的。


WordPress 官方文档是这么说的:


get_posts最合适的用途是基于一组参数创建一个帖子数组。它检索最近的帖子或符合此条件的帖子的列表。get_posts也可以用于创建多个循环,但在这种情况下,最好使用新的WP_Query更直接地引用WP_Query。


发表评论

暂无评论,抢个沙发...

客服 工单