get_posts 描述

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

get_posts的参数类似于get_pages的参数,但是实现方式不同,应该在适当的场景中使用。get_posts使用WP_Query,而get_pages更直接地查询数据库。每个参数都反映了实现中的差异。

query_posts也使用WP_Query,但不推荐,因为它通过更改全局变量$ wp_query的变量直接更改主循环。另一方面,get_posts只是引用一个新的WP_Query对象,因此不影响或改变主循环。

如果要在主查询执行之前更改主查询,可以使用pre_get_posts挂接它。如果您只想根据页面内的一组简单的参数调用一组帖子,那么get_posts是您最好的选择。

用法


<?php $posts_array = get_posts( $args ); ?> 

get_posts 函数使用方法


<?php 
//以下是官方的上面是我以前写的解释
        $args = array(
	'posts_per_page'=> 5,
	'numberposts'=> 5,
	'offset'=> 0,
	'category'=>''
	'orderby'=>'post_date',
	'order'=>'DESC',
	'include'=>''
	'exclude'=>''
	'meta_key'=>''
	'meta_value'=>''
	'post_type'=>'post',
	'post_mime_type'=>''
	'post_parent'=>''
	'post_status'=>'发布'
	'suppress_filters'=> true); 
$posts_array = get_posts( $args ); 
//注意:'numberposts'和'posts_per_page'可以互换使用。
?>

参数

有关完整参数列表,请参阅WP_Query

另请参见get_pages(),例如参数用法。

get_posts()使用WP_Query类来获取帖子。请参见参数部分中的WP_Query文档的这个函数接受的参数列表。

注意: get_posts使用'suppress_filters'=> true作为默认值,而query_posts()默认应用过滤器,当使用查询修改插件(如WPML)时,这可能会令人困惑。另请注意,即使'suppress_filters'为true,附加在pre_get_posts上的任何过滤器仍然是仅应用于'posts_ *'或'comment_feed_ *'的过滤器被抑制。

注意: category参数需要是类别的ID,而不是类别名称。

注意:类别参数可以是逗号分隔的类别列表,因为get_posts()函数将'category'参数直接传递到WP_Query作为“cat”。
$post_mime_type
(string | array)(可选)mime类型的列表或mime类型的逗号分隔的字符串。
默认值:无

返回值

(array)
帖子对象列表 请参阅get_post()返回值。
与get_pages()不同,get_posts()将在适当的上下文(即管理员)中返回私有页面。(见:Andreas Kirsch,WordPress Hacking II,2009年1月24日 - 访问2012-11-09)

例子

具有偏移的帖子列表
如果您的博客配置为在首页上只显示一个帖子,但也希望列出类别ID 1中前五个帖子的链接,您可以使用以下内容:


<ul>
<?php
global $post;
$args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 );
$myposts = get_posts( $args );
foreach( $myposts as $post ) :	setup_postdata($post); ?>
	<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>

注意: 使用偏移量时,上述查询只能在其中有多个帖子的类别中使用,否则将不会输出。

重新排列后贴图Postlists
如果你需要循环后,你在加入foreach之前的帖子,你可以使用这个:


<ul>
<?php
global $post;
$tmp_post = $post;
$args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 );
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>
	<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
<?php $post = $tmp_post; ?>
</ul>

访问所有帖子数据
默认情况下,某些后置相关数据不可用于get_posts,例如通过_content()发布内容或数字ID。这通过调用内部函数setup_postdata()解决,$ post数组作为其参数:


<?php
$args = array( 'numberposts' => 3 );
$lastposts = get_posts( $args );
foreach($lastposts as $post) : setup_postdata($post); ?>
	<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
	<?php the_content(); ?>
<?php endforeach; ?>

要访问帖子的ID或内容而不调用setup_postdata(),或实际上任何后期特定的数据(数据保留在帖子表中),您可以使用$ post-> COLUMN,其中COLUMN是数据的表列名。所以$ post-> ID保存ID,$ post-> post_content内容等等。要在页面上显示或打印此数据,请使用PHP echo命令,如下所示:


<?php echo $ post-> ID; ?>

按标题排序的最新帖子
要显示按字母顺序按升序排列的最后10个帖子,以下内容将显示其发布日期,标题和摘录:


<?php
$args = array( 'numberposts' => 10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );
foreach ($postslist as $post) :  setup_postdata($post); ?> 
	<div>
		<?php the_date(); ?>
		<br />
		<?php the_title(); ?>   
		<?php the_excerpt(); ?>
	</div>
<?php endforeach; ?>

随机帖子
显示通过使用MySQL RAND()函数为orderby参数值随机选择的5个帖子的列表:


<ul>
<?php
$args = array( 'numberposts' => 5, 'orderby' => 'rand' );
$rand_posts = get_posts( $args );
foreach( $rand_posts as $post ) : ?>
	<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>

显示所有附件
在您的模板中的任何循环之外执行此操作


<?php
$args = array( 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' => 'any', 'post_parent' => null ); 
$attachments = get_posts( $args );
if ($attachments) {
	foreach ( $attachments as $post ) {
		setup_postdata($post);
		the_title();
		the_attachment_link($post->ID, false);
		the_excerpt();
	}
}
?>

显示当前帖子的附件
在循环中执行此操作(其中$ post-> ID可用)。


<?php
$args = array( 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' =>'any', 'post_parent' => $post->ID ); 
$attachments = get_posts($args);
if ($attachments) {
	foreach ( $attachments as $attachment ) {
		echo apply_filters( 'the_title' , $attachment->post_title );
		the_attachment_link( $attachment->ID , false );
	}
}
?>

通过它的s子得到一个帖子
允许您通过post slug获取帖子ID。caller_get_posts参数不包括此自定义查询中的粘贴帖子。


<?php
$the_slug = 'my_slug';
$args=array(
  'name' => $the_slug,
  'post_type' => 'post',
  'post_status' => 'publish',
  'numberposts' => 1
);
$my_posts = get_posts($args);
if( $my_posts ) {
echo 'ID on the first post found '.$my_posts[0]->ID;
}
?>

分类参数
显示与某些分类法相关联的帖子。如果指定一个分类标准注册到自定义的帖子类型,而不是使用“类别”,您将使用“{custom_taxonomy_name}”。例如,如果您有一个名为“类型”的自定义分类,并且只想显示“爵士”类型的帖子,您将使用以下代码。


<?php
$args = array(
   'numberposts' => 8,
   'orderby' => 'rand',
   'post_type' => 'albums',
   'genre' => 'jazz',
   'post_status' => 'publish'
);
$show_albums = get_posts ( $args );
?>

以下示例显示使用'tax_query'标记为'jazz'的帖子:'genre'自定义分类法


$args = array(
	'tax_query' => array(
		array(
			'taxonomy' => 'genre',
			'field' => 'slug',
			'terms' => 'jazz'
		)
	)
);
$postslist = get_posts( $args );

请参阅该分类参数部分中的WP_Query文档更多的例子。

自定义字段参数
显示与某个自定义字段相关联的帖子。以下示例显示'product'的帖子类型的帖子,其中使用'meta_query'的值为'yes'的元键“特色”:


$args = array(
	'post_type' => 'product',
	'meta_query' => array(
		array(
			'key' => 'featured',
			'value' => 'yes',
		)
	)
 );
$postslist = get_posts( $args );

请参阅自定义字段的参数部分中的WP_Query更多的例子文档。

更改日志
自:1.2.0
源文件
get_posts()位于wp-includes/post.php。