前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用 WP_Query 而不是 query_posts 自定义 WordPress 查询

使用 WP_Query 而不是 query_posts 自定义 WordPress 查询

作者头像
Denis
发布于 2023-04-13 03:17:00
发布于 2023-04-13 03:17:00
37100
代码可运行
举报
文章被收录于专栏:WordPress果酱WordPress果酱
运行总次数:0
代码可运行

前面我们介绍了 WordPress 的主循环和全局变量,那么如果需要自定义 WordPress 查询进行一些事情,可以有两种方法,最容易的方法是使用 query_posts 函数,另外一种方法就是自定义 WP_Query。

query_posts 存在的问题

使用 query_posts 直接修改 WordPress 默认的主循环很方便,只要把对应的参数传递给函数即可,主循环的查询即可按照新的参数去查询,但是这样会造成以下的问题:

  • 干扰使用到 WordPress 主循环的插件。
  • 可能使一些 WordPress 条件判断函数失效。
  • 需要去重新设置和处理回滚和偏移等问题。

使用 WP_Query 自定义查询

所以最好的方法是使用 WP_Query 来创建自定义 WordPress 查询,这样创建的查询和 WordPress 主循环隔离开,并不会影响主循环的行为。那么如何是用 WP_Query 呢?

使用 WP_Query 第一步是创建一个实例对象,比如我们要创建一个最新文章列表,就可以使用下面的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
	$recent_query = new WP_Query();
	$recent_query->query('posts_per_page=5');
?>

上面代码定义了一个叫做 recent_query 的变量,它是类 WP_Query 的一个实例,然后我使用了 WP_Query 的一个方法 query 创建一个新的查询,它的参数和 query_posts 函数的参数一样

现在就可以开始我们自己的循环了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php while ($recent_query->have_posts()) : $recent_query->the_post(); ?>
	 <!-- 开始干活 -->
<?php endwhile; ?>

上面我们用了 WP_Query 的两个方法,分别是 have_poststhe_post,这两个方法的具体意思,可以参考这篇文章全局变量和 WordPress 主循环里面的介绍。

这样做的好处是在循环中,我们可以使用 WordPress 标准的文章相关的模板函数,比如下面是使用自定义的 Loop 先是最新5篇文章的完整代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<h3>最新日志</h3>

<ul>

<?php
	$recent_query = new WP_Query();
	$recent_query->query('posts_per_page=5');
?>

<?php while ($recent_query->have_posts()) : $recent_query->the_post(); ?>

	<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>

<?php endwhile; ?>

<?php wp_reset_query(); ?>

</ul>

简单总结

使用 WP_Query 创建自定义 WordPress 查询是不会干扰默认的 WordPress 主循环,使用它我们完全可以在一个页面同时运行两个或者以上完全独立的 WordPress 循环。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
索引的数据结构及算法原理--为什么使用B-Tree
上文说过,红黑树等数据结构也可以用来实现索引,但是文件系统及数据库系统普遍采用B-/+Tree作为索引结构,这一节将结合计算机组成原理相关知识讨论B-/+Tree作为索引的理论基础。
陈不成i
2021/06/08
3240
MySQL 索引的底层逻辑
索引的本质其实就是一种数据结构。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找,这种复杂度为 O(n) 的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如二分查找、二叉树查找等。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。
政采云前端团队
2024/01/03
9690
MySQL 索引的底层逻辑
MySQL索引底层实现原理 & MyISAM非聚簇索引 vs. InnoDB聚簇索引
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。
一个会写诗的程序员
2019/10/28
1.4K0
MySQL索引底层实现原理 & MyISAM非聚簇索引 vs. InnoDB聚簇索引
MySQL索引背后的数据结构及算法原理
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。
互扯程序
2019/07/30
4890
MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。 文章主要内容分为三个部分。 第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础。 第二部分结合MySQL数据库中MyISAM和
用户1263954
2018/06/22
1.2K0
【软考学习6】计算机存储结构——局部性原理、Cache、主存地址单元、磁盘存取、总线和可靠性
计算机的存储机构包括了 CPU 的 寄存器,用于临时缓存指令数据,还有 高速缓存 Cache、内存 和 外存,如下图所示。
Designer 小郑
2023/08/01
6260
【软考学习6】计算机存储结构——局部性原理、Cache、主存地址单元、磁盘存取、总线和可靠性
《面试官:谈谈你对索引的认知》系列之磁盘I/O
前面两讲我们介绍了B-/+树的特性对比,数据库系统普遍采用B-/+树作为索引结构。
架构精进之路
2021/07/12
5520
《面试官:谈谈你对索引的认知》系列之磁盘I/O
MySQL索引背后的数据结构及算法原理
本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。
叫你不戴帽子
2018/06/03
2K0
MySQL索引背后的数据结构及算法原理
MySQL的B+tree索引实现原理
官方定义:索引(Index)是帮助MySQL高效获取数据的数据结构,即索引是数据结构。 其出现就是为了提高数据查询效率,就像书的目录。
JavaEdge
2021/02/22
6240
MySQL的B+tree索引实现原理
算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树。2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key。
yaphetsfang
2020/07/30
4080
算法和数据结构: 十 平衡查找树之B树
数据结构技术知识总结之二——BTree
B-Tree 是 2-3 树的一种变形,可以设置度数 M,每个节点上最多可以有 M 个值;根据硬盘读取时的预读原理,磁盘读取时每次从磁盘上预读 page 容量(一般为 1024 字节)的整数倍,所以对于硬盘来说,可以将度设为 1024,这样就硬盘文件的索引就建立完毕,形成了一个 B-Tree 结构;
剑影啸清寒
2020/07/15
7380
mysql学习之优化总结(2)--索引的那些事
上一篇文章我们在研究MySQL查询过程的查询优化步骤中提到过优化索引可以优化查询优化的过程,索引到底是什么?它在查询过程中是一个怎样的角色?索引适用于什么场景?我们怎么用好它呢,这一节我们一起来深入了解下索引,理解索引相关的数据结构和算法,理解它的原理,帮助我们更好的使用索引。
王辅佳
2018/10/27
7550
数据库索引(结合B-树和B+树)
数据库索引,是数据库管理系统中一个排序的数据结构以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种
Mister24
2018/05/14
9380
终于知道为什么片子太多会导致硬盘变慢了
硬盘的种类主要是SCSI 、IDE 、以及现在流行的SATA等;任何一种硬盘的生产都要一定的标准;随着相应的标准的升级,硬盘生产技术也在升级;比如 SCSI标准已经经历了SCSI-1 、SCSI-2、SCSI-3;其中目前咱们经常在服务器网站看到的 Ultral-160就是基于SCSI-3标准的;IDE 遵循的是ATA标准,而目前流行的SATA,是ATA标准的升级版本;IDE是并口设备,而SATA是串口,SATA的发展目的是替换IDE;
架构师修行之路
2021/06/09
1.6K0
终于知道为什么片子太多会导致硬盘变慢了
微信大牛教你深入了解数据库索引
| 作者 刘国斌,腾讯微信事业群研发工程师,目前从事企业微信的后台研发工作,已经参与企业微信消息系统、群聊、客户联系等企业微信多个核心功能的迭代。 ---- 数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。 最基本的查询算法当然是顺序查找(linear search),然而这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如二分查找(binary search)、二叉树查找(
腾讯云数据库 TencentDB
2020/08/11
6920
MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎 对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索 引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。 数据结构及算法基础 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到
wangxl
2018/03/08
1.2K0
MySQL索引背后的数据结构及算法原理
MySQL索引及其实现原理(基于MyISAM及InnoDB引擎)
查询是数据库的最主要功能之一。我们都希望查询速度能尽可能快,因此数据库系统的设计者会从查询算法角度优化
JavaEdge
2018/05/16
21.1K2
MySQL索引及其实现原理(基于MyISAM及InnoDB引擎)
数据库索引
索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。
Kevin_Zhang
2018/09/20
1K0
数据库索引
数据库索引原理及优化
本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。
Bug开发工程师
2019/05/05
6060
数据库索引原理及优化
面试官:MySQL 存储数据过多,为啥会变慢?
目前大部分数据库系统及文件系统都采用BTree或其变种B+Tree作为索引结构,mysql 快与慢与索引结构有较大关系。
王小明_HIT
2023/08/09
3520
面试官:MySQL 存储数据过多,为啥会变慢?
推荐阅读
相关推荐
索引的数据结构及算法原理--为什么使用B-Tree
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验