明凯博客

关注网站技术,一个特立独行的程序员

wordpress 函数 get_posts()详解

以前写过一篇关于get_post()的函数,近来整理了一下文档,想把get_posts函数的给补上。

wordpress 函数 get_post()详解

wordpress 的内置函数 get_posts 用来提取数据库中多篇指定文章或者是随机文章,今天研究了下,其使用的方法还不算是很麻烦,主要是解析其函数都有哪些方法,先看一下用法,代码如下:

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

下面再看一下$args的参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
< ?php
$args = array(
//需要提取的文章数
"numberposts"     => 10,//以第几篇文章为起始位置
"offset"          => 0,//分类的ID,多个用逗号将分类编号隔开,或传递编号数组,可指定多个分类编号。
//大部分 CMS 使用该函数的重点。
"category"        => ,//排序规则(注1)
"orderby"         => "post_date",//升序、降序 "ASC" —— 升序 (低到高)  "DESC" —— 降序 (高到底)
"order"           => "DESC",//要显示文章的ID
"include"         => ,//要排除文章的ID
"exclude"         => ,//自定义字段名称
"meta_key"        => ,
//自定义字段的值,配合上一个参数,来选择显示符合自定义字段数值的文章。
"meta_value"      => ,//post(日志)——默认,page(页面),
//attachment(附件),any —— (所有)
"post_type"       => "post",//文章的 mime 类型
"post_mime_type"  => ,//要显示文章的父级 ID
"post_parent"     => ,//文章状态
"post_status"     => "publish" );
?>

现在我们再来看它的用法:

最初到现在的文章列表

如果在博客首页上只设置显示一篇文章,但同时希望在分类ID 1中显示最近五篇文章的链接,可使用如下代码:

1
2
3
4
5
6
7
8
9
10
 <ul>   
< ?php   
global $post;   
$myposts = get_posts('numberposts=5&offset=1&category=1');   
foreach($myposts as $post) :   
?>      
   <li><a href="<?php the_permalink(); ?>">< ?php the_title(); ?></a>
</li>   
 < ?php endforeach; ?>   
 </ul>

注意:使用offset时,以上查询仅适用于含有一篇以上文章的分类,否则无法输出。

获取所有文章资料

默认情况下get_posts无法获取一些文章相关数据,如通过 the_content()获取文章内容或序列ID。调用内部函数setup_postdata(),以$post 数组为其自变量,可以解决这一问题:

1
2
3
4
5
6
7
8
9
< ?php   
$lastposts = get_posts('numberposts=3');   
foreach($lastposts as $post) :      
   setup_postdata($post);   
?>   
<h2><a href="<?php the_permalink(); ?>" id="post-< ?php the_ID(); ?>">
< ?php the_title(); ?></a></h2>   
< ?php the_content(); ?>   
< ?php endforeach; ?>

不希望通过调用setup_postdata()来获取文章的ID或内容,或者获取文章的任何相关数据时(数据存留在文章列表中),可以使用$post->COLUMN,COLUMN是文章数据表格的纵列名称。因此$post->ID指明文章ID,$post->post_content指明文章内容,以此类推。如要在页面上显示这些数据,请使用PHP echo命令,如下所示:

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

按标题为最新发表文章排序

以下代码可按字母升序显示最近发表的十篇文章的发布日期、标题和摘要:

1
2
3
4
5
6
7
8
9
10
11
12
< ?php  
$postslist = get_posts('numberposts=10&order=ASC&orderby=title');  
foreach ($postslist as $post) :       
   setup_postdata($post);  
?>    
<div>  
< ?php the_date(); ?>   
<br /> 
< ?php the_title(); ?>      
< ?php the_excerpt(); ?>   
</div>   
< ?php endforeach; ?>

注意:排序参数在2.6版本中有所修改。此代码适用于新排序格式。详细内容参见参数。

任意文章

用MySQL RAND()函数指定排序参数的值,可以显示出随意选择的五篇文章:

1
2
3
4
5
6
7
8
9
10
<ul><li><h2>A random selection of my writing</h2>      
   <ul>   
< ?php   
$rand_posts = get_posts('numberposts=5&orderby=rand');   
foreach( $rand_posts as $post ) :   
?>      
   <li><a href="<?php the_permalink(); ?>">< ?php the_title(); ?></a></li>   
< ?php endforeach; ?>      
   </ul>   
</li></ul>

显示所有附件

不用模板中任何循环进行本项操作。

(使用2.5版本后的get_children()函数相对方便。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
< ?php    
$args = array(  	
       'post_type' => 'attachment',  	
       'numberposts' => -1,  	
       'post_status' => null,  	
       'post_parent' => null, // any parent  	
       );   
$attachments = get_posts($args);  
if ($attachments) {  	
      foreach ($attachments as $post) {  		
              setup_postdata($post);  		
              the_title();  		
              the_attachment_link($post->ID, false);  		
              the_excerpt();  	
      }  
}    
?>

显示最新文章的附件

在The_Loop ($post->ID可用)中进行本类操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
< ?php   
 
$args = array(  	
       'post_type' => 'attachment',  	
       'numberposts' => -1,  	
       'post_status' => null,  	
       '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);  	
      }  
}    
?>

, ,

相关文章

发表评论

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