0

0

wordpress 中强大的 query_posts()函数_PHP教程

php中文网

php中文网

发布时间:2016-07-13 10:38:41

|

2170人浏览过

|

来源于php中文网

原创

动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版
动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版

动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包

下载

今天说说WordPress 的主查询函数 -query_posts(),因为我正在制作的主题里面多次用到了这个函数 。

 

query_posts()查询函数决定了哪些文章出现在WordPress 主 循环(loop)中,正因为如此,query_posts函数仅用于修改主页循环(Loop),而不是在页面上生成次级循环。如果你希望在主循环外另外生 成循环,应该新建独立的WP_Query对象,用这些对象生成循环。在主循环外的循环上使用query_posts会导致主循环运行偏差,并可能在页面上 显示出你不希望看到的内容。

 

query_posts()查询函数函数接收大量参数,格式与URL中的参数格式相同(如p=4表示ID为4的文章)。下面就举例说说query_posts函数的一些常用的语法格式。

1.从博客主页上排除某些分类目录

将以下代码添加到index.php文件中,使主页显示的文章可以来自除分类3以外的任何分类。

Php代码  收藏代码

  1.   if (is_home()) {  
  2.     query_posts("cat=-3");  
  3.   }  
  4. ?>  

 

你也可以多排除几个分类。

Php代码  收藏代码

  1.   if (is_home()) {  
  2.     query_posts("cat=-1,-2,-3");  
  3.   }  
  4. ?>  

 

2.查询指定文章

用以下语句检索某篇指定文章:

Php代码  收藏代码

  1. //获取ID值为5的文章  
  2. query_posts('p=5');  
  3. ?>  

 

如果你希望在查询语句中使用Read More功能,请将全局变量$more设为0。

Php代码  收藏代码

  1. //获取ID值为5的页面  
  2. query_posts('p=5');  
  3.   
  4. global $more;  
  5. //初始化$more  
  6. $more = 0;  
  7.   
  8. //循环查询到的结果  
  9. while (have_posts()) : the_post();  
  10. the_content('Read the full post ?');  
  11. endwhile;  
  12. ?>  

 

3.检索指定页面

用以下语句检索某篇指定页面:

Php代码  收藏代码

  1. query_posts('page_id=7'); //获取页面ID为7的页面  
  2. ?>  

 

或者

Php代码  收藏代码

  1. query_posts('pagename=about');  
  2. ?>  

 

检索子页面时,需要提供子页面及其父页面的别名,用斜线隔开两者。例如:

Php代码  收藏代码

  1. query_posts('pagename=parent/child');  
  2. ?>  

 

上面都是采取 query_posts($query_string) 的形式来调用该函数,下面介绍另一种方法,用数组传递参数变量。

Php代码  收藏代码

  1. query_posts(array(  
  2.   'cat' => 22,  
  3.   'year' => $current_year,  
  4.   'monthnum' => $current_month,  
  5.   'order' => 'ASC',  
  6. ));  

 

相比字符串方式,数组形式更加形象直观,不容易出错。

下面整理一些经常要用到的参数,有些是我用过的,有些则没有,算作归纳吧。

分类参数

只显示特定分类下的文章。

  • cat —— 必须使用分类ID
  • category_name
  • category_and —— 必须使用分类ID
  • category_in —— 必须使用分类ID
  • category_not_in —— 必须使用分类ID

根据ID显示单个分类

只显示来自某一个分类目录ID(以及该分类目录下的子分类目录)的文章:

Php代码  收藏代码

  1. query_posts('cat=4');  

 

根据分类名称显示单个分类

只显示来自某一个分类名称下的文章:

Php代码  收藏代码

  1. query_posts('category_name=Staff Home');  

 

根据ID显示多个分类

显示来自若干指定分类目录ID下的文章:

Php代码  收藏代码

  1. query_posts('cat=2,6,17,38');  

 

排除某一分类中的文章

显示除某一分类文章外的所有文章,被排除的分类ID以减号(’-')作为前缀。

Php代码  收藏代码

  1. query_posts('cat=-3');  

 

以上代码删除ID为3的分类中的文章。

 

处理多个分类

显示隶属于多个分类的文章。下面的代码可展示同时属于分类2和分类6的文章:

Php代码  收藏代码

  1. query_posts(array('category__and' => array(2,6)));  

 

如果希望显示分类2或分类6中的文章,可以使用上面介绍的cat,也可以使用category_in函数 (注意这里不会显示分类下子分类中的文章) :

Php代码  收藏代码

  1. query_posts(array('category__in' => array(2,6)));  

 

可以用下面这种方式排除多个分类中的文章:

Php代码  收藏代码

  1. query_posts(array('category__not_in' => array(2,6)));  

 

标签参数

显示特定标签下的文章。

  • tag —— 必须使用标签ID
  • tag_id —— 必须使用标签ID
  • tag_and —— 必须使用标签ID
  • tag_in —— 必须使用标签ID
  • tag_not_in —— 必须使用标签ID
  • tag_slug_and ——必须使用标签ID
  • tag_slug_in ——必须使用标签ID

 

获取某一标签中的文章

Php代码  收藏代码

  1. query_posts('tag=cooking');  

 

获取若干标签中任一标签中的文章

Php代码  收藏代码

  1. query_posts('tag=bread+baking+recipe');  

 

多个标签

显示同时属于ID为37和47的标签下的文章:

Php代码  收藏代码

  1. query_posts(array('tag__and' => array(37,47));  

 

若要显示ID为为37或47的标签下的文章,可以使用tag参数,也可以用tag_in:

Php代码  收藏代码

  1. query_posts(array('tag__in' => array(37,47));  

 

显示的文章既不属于标签37,也不属于标签47:

Php代码  收藏代码

  1. query_posts(array('tag__not_in' => array(37,47));  

 

tag_slug_in与tag_slug_and工作方式几乎一致,不同之处在于相匹配的别名不同。

 

作者参数

你也可以根据作者来选择文章。

  • author=3
  • author=-3 ——排除ID为3的作者所发表的文章
  • author_name=Harriet

注意:author_name运行在user_nicename字段上,同时author运行在author id字段上。

显示ID为1的作者所发表的所有页面,以标题顺序排列页面,页面列表上方无置顶文章:

Php代码  收藏代码

  1. query_posts('caller_get_posts=1&author=1&post_type=page&post_status=publish&orderby=title&order=ASC');  

 

文章&页面参数

检索单篇文章或页面。

  • ‘p’ => 27 —— 通过文章ID显示该文章
  • ‘name’ => ‘about-my-life’ —— 对某篇文章的查询,查询中含有文章别名
  • ‘page_id’ => 7 —— 对ID为7的页面的查询
  • ‘pagename’ => ‘about’ —— 注意,这不是页面标题,而是页面路径
  • 用’posts_per_page’ => 1 – use ‘posts_per_page’ => 3 展示3篇文章。用’posts_per_page’ => -1展示所有文章
  • ‘showposts’ => 1 – use ‘showposts’ => 3 展示3篇文章。用’showposts’ => -1展示所有文章。已弃用。
  • ‘post__in’ => array(5,12,2,14,7) —— 指定希望检索的文章ID
  • ‘post__not_in’ => array(6,2,8) ——排除不希望检索的文章ID
  • ‘post_type’ => ‘page’ ——返回页面;默认值为post;可用值包括any, attachment, page, post或revision。any可检索到除修订版外的所有页面类型。
  • ‘post_status’ => ‘publish’ —— 返回已发布页面。可用值还包括pending, draft, future, private, trash。关于inherit请见get_children。trash状态新增于WordPress  2.9。
  • ‘post_parent’ => 93 —— 返回页面93的子页面。

 

置顶文章参数

置顶文章功能引入于WordPress 2.7。在查询中,被设为“置顶”的文章会显示在其它文章之前,除非该文章已经被caller_get_posts=1 参数排除。

  • array(‘post__in’=>get_option(‘sticky_posts’)) —— 返回所有置顶文章的数组
  • caller_get_posts=1 —— 排除返回的文章上方的置顶文章,但在返回文章列表时,以自然顺序将曾经置顶的文章安插在列表中。

 

返回第一篇置顶文章

Php代码  收藏代码

  1. $sticky=get_option('sticky_posts') ;  
  2. query_posts('p=' . $sticky[0]);  

 

Php代码  收藏代码

  1. $args = array(  
  2. 'posts_per_page' => 1,  
  3. 'post__in' => get_option('sticky_posts'),  
  4. 'caller_get_posts' => 1  
  5. );  
  6. query_posts($args);  

 

注意:第二种方法只能返回最新发表的置顶文章;若当前无置顶文章,返回最新发表文章。

 

返回第一篇置顶文章;若无,则不返回任何内容

Php代码  收藏代码

  1. $sticky = get_option('sticky_posts');  
  2. $args = array(  
  3. 'posts_per_page' => 1,  
  4. 'post__in' => $sticky,  
  5. 'caller_get_posts' => 1  
  6. );  
  7. query_posts($args);  
  8. if($sticky[0]) {  
  9. // insert here your stuff...  
  10. }  

 

从查询中排除所有置顶文章

Php代码  收藏代码

  1. query_posts(array("post__not_in" =>get_option("sticky_posts")));  

 

返回某一分类下所有文章,但不在文章列表上方显示置顶文章。所有设为“置顶”的文章以正常顺序(如日期顺序)显示

Php代码  收藏代码

  1. query_posts('caller_get_posts=1&posts_per_page=3&cat=6');  

 

返回某一分类下所有文章,完全不显示置顶文章,保留分页

Php代码  收藏代码

  1.   $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;  
  2.   $sticky=get_option('sticky_posts');  
  3.   $args=array(  
  4.     'cat'=>3,  
  5.     'caller_get_posts'=>1,  
  6.     'post__not_in' => $sticky,  
  7.     'paged'=>$paged,  
  8.   );  
  9.   query_posts($args);  
  10. ?>  

 

时间参数

检索特定时间段内发表的文章。

  • hour= -hour (时,-范围从0到23)
  • minute= – minute (分,-范围从0到60)
  • second= – second (秒,-范围从0到60)
  • day= – day of the month (日,-范围从1到31)
  • monthnum= – month number (月,-范围从1到12)
  • year= – 4 digit year (年,如2009)
  • w= – week of the year(一年中的第几周,-范围从0到53),使用 MySQL WEEK command Mode=1命令

 

返回最近发表的文章

Php代码  收藏代码

  1. $today = getdate();    
  2. query_posts('year=' .$today["year"] .'&monthnum=' .$today["mon"] .'&day=' .$today["mday"] );  

 

返回12月20日发表的文章

Php代码  收藏代码

  1. query_posts(monthnum=12&day=20' );  

 

返回2009年3月1日到3月15日之间发表的文章

Php代码  收藏代码

  1.   //based on Austin Matzko's code from wp-hackers email list  
  2.   function filter_where($where = '') {  
  3.     //posts for March 1 to March 15, 2009  
  4.     $where .= " AND post_date >= '2009-03-01' AND post_date 
  5.     return $where;  
  6.   }  
  7.   add_filter('posts_where', 'filter_where');  
  8.   query_posts($query_string);  
  9. ?>  

 

返回最近30天内发表的文章

Php代码  收藏代码

  1.   //based on Austin Matzko's code from wp-hackers email list  
  2.   function filter_where($where = '') {  
  3.     //posts in the last 30 days  
  4.     $where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";  
  5.     return $where;  
  6.   }  
  7.   add_filter('posts_where', 'filter_where');  
  8.   query_posts($query_string);  
  9. ?>  

 

返回过去30天到过去60天内发表的文章

Php代码  收藏代码

  1.   //based on Austin Matzko's code from wp-hackers email list  
  2.   function filter_where($where = '') {  
  3.     //posts 30 to 60 days old  
  4.     $where .= " AND post_date >= '" . date('Y-m-d', strtotime('-60 days')) . "'" . " AND post_date 
  5.     return $where;  
  6.   }  
  7.   add_filter('posts_where', 'filter_where');  
  8.   query_posts($query_string);  
  9. ?>  

 

分页参数

  • paged=2 ——显示点击“较早的日志”链接后出现在第二页中的文章
  • posts_per_page=10 —— 每页所显示的文章数量;若值为-1,显示所有文章。
  • order=ASC —— 按时间顺序显示文章,若值为DESC则按逆向时间顺序显示文章(默认)

 

offset(偏移)参数

通过offset参数,你可以移除或忽略正常情况下被查询集中的一篇或多篇初始文章。

以下显示最近一篇文章之后的5篇文章:

Php代码  收藏代码

  1. query_posts('posts_per_page=5&offset=1');  

 

排序参数

  • orderby=author
  • orderby=date
  • orderby=category ——注意:该参数不能用于WordPress 2.8,可能已经被废止
  • orderby=title
  • orderby=modified
  • orderby=menu_order
  • orderby=parent
  • orderby=ID
  • orderby=rand
  • orderby=meta_value —— meta_key=some value语句也应出现在查询参数中
  • orderby=none – no order —— (新增于 WP 2.8)
  • orderby=comment_count ——(新增于 WP 2.9)

 

顺序参数

决定以升序或降序排列排序参数

  • order=ASC —— 升序,从最低值到最高值
  • order=DESC —— 降序,从最高值到最低值

 

自定义字段参数

根据自定义关键字或值检索文章(或页面)。

  • meta_key=
  • metavalue=
  • meta_compare= —— 用以测试metavalue=的操作符,默认值为 ‘=’,其它可能的值包括’!=’、 ‘>’、’>=’、 ‘

返回关键字为 ‘color’ 且值为’blue’的文章:

Php代码  收藏代码

  1. query_posts('meta_key=color&metavalue=blue');  

 

返回自定义字段关键字为’color’的文章,无论自定义字段值为何:

Php代码  收藏代码

  1. query_posts('meta_key=color');  

 

返回自定义字段值为’color’的文章,无论关键字为何:

Php代码  收藏代码

  1. query_posts('metavalue=color');  

 

返回自定义字段值为’green’的页面,无论自定义字段关键字为何:

Php代码  收藏代码

  1. query_posts('post_type=page&metavalue=green');  

 

返回自定义关键字为’color’、自定义字段值不为’blue’的文章和页面:

Php代码  收藏代码

  1. query_posts('post_type=any&meta_key=color&meta_compare=!=&metavalue=blue');  

 

返回自定义字段关键字为’miles’、自定义字段值小于等于22的文章。注意,字段值99会被看做大于字段值100,因为数据是以字符串形式而不是数字形式存储的。

query_posts('meta_key=miles&meta_compare=<=&metavalue=22');

 

联合参数

你可能已经从上面有些例子中看出来了,可以用&符号连接不同参数,如:

Php代码  收藏代码

  1. uery_posts('cat=3&year=2004');  

 

显示主页上、当前月份发表的、隶属于分类13下的文章:

Php代码  收藏代码

  1. if (is_home()) {  
  2.   query_posts($query_string . '&cat=13&monthnum=' . date('n',current_time('timestamp')));  
  3. }  

 

在WP 2.3中,以下参数联合会返回同时属于分类1和分类3的两篇文章,以文章标题降序排列:

Php代码  收藏代码

  1. query_posts(array('category__and'=>array(1,3),'posts_per_page'=>2,'orderby'=>title,'order'=>DESC));  

 

在WP 2.3和WP 2.5中,以下参数联合本应返回属于分类1且带有“apples”标签的文章:

Php代码  收藏代码

  1. query_posts('cat=1&tag=apples');  

 

但由于一个bug,代码没能显示出正常结果。有一个解决办法:利用+号查找多个标签:

Php代码  收藏代码

  1. query_posts('cat=1&tag=apples+apples');  

 

这就显示出我们希望显示的结果了。

 

使用技巧

设置>阅读中的“博客页面最多显示”参数会影响你的查询结果,要覆盖设置>阅读中的设置,需要在标签中添加’posts_per_page’ 参数。例如:

Php代码  收藏代码

  1. query_posts('category_name=The Category Name&posts_per_page=-1');  //returns ALL from the category  

 

 

注意:query_posts函数会改写并取代页面的主查询。为谨慎起见,请不要将query_posts用作其它用途。

 

 

来源: http://www.zuluo.net/2012/2012-01/wordpress-query_posts.html

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/735067.htmlTechArticle今天说说WordPress的主查询函数-query_posts(),因为我正在制作的主题里面多次用到了这个函数。 query_posts()查询函数决定了哪些文章出现在Wo...

相关文章

WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

169

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

246

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

34

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第二十三期_前端开发
第二十三期_前端开发

共98课时 | 8.3万人学习

WordPress视频教程
WordPress视频教程

共23课时 | 9.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号