0

0

合并WP_Query与主查询

PHPz

PHPz

发布时间:2023-08-30 19:57:17

|

923人浏览过

|

来源于php中文网

原创

合并wp_query与主查询

到目前为止,在本系列中,您已经学习了如何使用 WP_Query 创建在主题或插件中使用的自定义查询。

在大多数情况下,您将使用 WP_Query 以及一组全新的参数,这些参数与主查询中的参数分开,但是如果您想在参数中包含主查询怎么办?

您可能想要执行此操作的示例包括:

  • 在类别或分类页面上,仅显示一种帖子类型的帖子
  • 在类别页面上,显示包含当前类别和其他类别或标签或分类术语的帖子
  • 在帖子类型的页面上,仅显示具有特定元数据的帖子

我可以继续说下去,有很多机会可以将主查询与您自己的自定义查询相结合。

我将通过三个示例来演示这一点:第一个示例是一个带有一个循环的简单示例;第二个将使用 foreach 输出多个循环,每个循环对应一种帖子类型;第三个将使用两个单独的查询在类别存档上输出两种帖子类型。

根据主查询定义变量

但是,您要将主查询与 WP_Query 结合起来,您需要以一种易于在 WP_Query 中使用的方式存储当前查询对象论据。最简单的方法是将其分配给一个变量。

在定义 WP_Query 参数之前执行此操作,如下所示:

$mainquery = get_queried_object();

get_queried_object() 函数返回当前查询的对象,无论该对象是什么。在单个帖子上,它只会返回帖子对象,而在存档上,它将返回类别、标签、术语对象或与存档相关的任何对象。它返回查询对象的ID。

然后,您可以在 WP_Query 参数中使用此 $mainquery 变量。现在让我们看一些示例。

示例 1:在类别页面上仅显示一种帖子类型的帖子

假设您的网站添加了自定义帖子类型,并且您已为该自定义帖子类型启用了类别。在每个类别的类别存档上,您不想显示帖子:相反,您想显示新帖子类型的帖子 - 让我们将其称为 product

您的查询可能如下所示:

 $mainquery->slug,
    'post_type' => 'product'
);

// Custom query.
$query = new WP_Query( $args );

// Check that we have query results.
if ( $query->have_posts() ) {

    // Start looping over the query results.
    while ( $query->have_posts() ) {

        $query->the_post();

        // Contents of the queried post results go here.

    }

}

// Restore original post data.
wp_reset_postdata();

?>

由于我上面使用的 category_name 参数以类别 slug 作为参数,因此需要在变量后面添加 ->slug 来输出类别 slug。

这为您提供了一个查询,该查询从具有当前查询类别的数据库中获取 product 帖子类型的帖子。您可以在 category.php 页面模板上使用它。

动易网上商城管理系统 2006 Sp6 Build 1120 普及版
动易网上商城管理系统 2006 Sp6 Build 1120 普及版

将产品展示、购物管理、资金管理等功能相结合,并提供了简易的操作、丰富的功能和完善的权限管理,为用户提供了一个低成本、高效率的网上商城建设方案包含PowerEasy CMS普及版,主要功能模块:文章频道、下载频道、图片频道、留言频道、采集管理、商城模块、商城日常操作模块500个订单限制(超出限制后只能查看和删除,不能进行其他处理) 无订单处理权限分配功能(只有超级管理员才能处理订单)

下载

注意:您还可以使用 pre_get_posts 挂钩修改主查询,并结合条件函数检查类别档案来实现此结果。

示例2:主查询与WP_Query和foreach组合输出多个循环

下一个示例将输出当前类别页面的所有帖子,但不是将它们全部显示在一个块中,而是按帖子类型将它们分开。

这意味着您可以使用 CSS 将帖子类型分类为页面上的块或列,或者只是将它们分成不同的列表。

为此,您可以使用以下代码:

 $mainquery->slug,
        'post_type' => $post_type
    );

    // Custom query.
    $query = new WP_Query( $args );

    // Check that we have query results.
    if ( $query->have_posts() ) {

        // Start looping over the query results.
        while ( $query->have_posts() ) {

            $query->the_post();

            // Contents of the queried post results go here.

        }

    }

    // Restore original post data.
    wp_reset_postdata();

}

?>

这使用了我们之前使用过的 $mainquery 变量,但它还添加了一个 $post_types 变量来存储在网站上注册的所有帖子类型,以及一个 $post_type 变量依次存储每个单独的帖子类型。

示例 3:针对两种帖子类型的两个单独查询

最后一个示例与第二个示例类似,但将帖子类型分为两个单独的查询,每个查询都有自己不同的循环。这使您可以更好地控制每个内容的显示内容,因此您可以以不同于产品的方式显示帖子,可能包括产品的特色图片或为它们提供不同的布局。

假设您的网站注册了 product 帖子类型,并为其启用了类别,并且您也在撰写具有相同类别的博客文章。在每个类别存档页面上,您希望显示最近的十篇帖子,然后您希望显示同一类别中所有产品的列表。

为此,您可以使用类似以下代码:

 $mainquery->slug,
    'post_type' => 'post',
    'posts_per_page' => '10'
);

// Custom query.
$query = new WP_Query( $args );

// Check that we have query results.
if ( $query->have_posts() ) {

    // Start looping over the query results.
    while ( $query->have_posts() ) {

        $query->the_post();

        // Contents of the queried post results go here.

    }

}

// Restore original post data.
wp_reset_postdata();

// Second query arguments for products.
$args = array (
    'category_name' => $mainquery->slug,
    'post_type' => 'product',
    'posts_per_page' => '-1'
);

// Custom query.
$query = new WP_Query( $args );

// Check that we have query results.
if ( $query->have_posts() ) {

    // Start looping over the query results.
    while ( $query->have_posts() ) {

        $query->the_post();

        // Contents of the queried post results go here.

    }

}

// Restore original post data.
wp_reset_postdata();

?>

然后,您可以以不同的方式编写每个循环,以便为每种帖子类型输出不同的数据。

摘要

从上面的示例中可以看出,使用 WP_Query 不仅可以创建与主查询分离的完全自定义查询,还可以合并当前查询的对象并创建更强大的查询在存档页面上。

上面的示例也可以使用其他存档类型来完成:用于分类、作者、日期等。看看你是否能想出更多的可能性!

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

75

2025.12.04

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

75

2025.12.04

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

358

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2082

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

349

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

256

2023.09.05

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

326

2023.10.09

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

412

2023.10.16

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

19

2026.01.29

热门下载

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

精品课程

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

共98课时 | 7.6万人学习

WordPress视频教程
WordPress视频教程

共23课时 | 9.7万人学习

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

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