以下是使用WP_Query检索所需帖子的方法

如果您过去曾经制作过简单的主题,则很有可能不需要自己检索帖子。毕竟,WordPress会在主页上加载最新的10条帖子,并在存档页面上加载正确的帖子。那更复杂的场景呢?如果您想要各种各样的站点地图并且想要列出所有帖子怎么办 按日期排序的页面?


WP_Query是您的朋友,它使您可以根据自己的条件从数据库中提取帖子。您也可以从一个类别中检索包含某些标签的所有帖子。您可以检索去年创建的所有页面以及没有特色图片的帖子.

在这篇文章中,我将向您深入介绍WP_Query的工作原理-让我们开始吧!

自定义循环

良好地使用自定义查询的关键是掌握可以传递给它们的参数。在开始讨论之前,让我们快速创建一个 "骨架" 我们可以用来列出帖子。常规存档页面上的循环如下所示:

<?php if(have_posts()): ?>
<?php while(have_posts()):the_post() ?>

<?PHP的同时 ?>
<?PHP其他: ?>

<?PHP Endif的 ?>

这工作得很好,因为在页面加载之前,WordPress已经检索了正确的帖子。编写自定义查询时,我们需要一个自定义循环。代码非常相似,如下所示:

<?的PHP
$ args =数组(
‘post_type’=> “发布”,
‘post_status’=> ‘未来’
);
$ scheduled = new WP_Query($ args);

如果($ scheduled->have_posts()):
?>
<?PHP的同时($计划->have_posts()):已排定->the_post() ?>

<?PHP的同时 ?>
<?PHP其他: ?>

<?PHP Endif的 ?>

我们使用WP_Query类创建一个新的WordPress查询,并向其传递参数以指定所需的帖子类型。然后,我们在$ scheduled对象上调用have_posts()和the_post()方法.

如果您是面向对象编程的新手,并且不真正了解原因,请放心,您仍然可以轻松使用自定义查询。在整个文章中,我们将重点介绍$ args数组,这很简单.

简单的论点

正如我提到的,主要 "知识体系" 当涉及到WP_Query时,要放在其参数中。的 法典 列出所有这些,我们将在这里查看最有用的.

一些参数非常简单,例如tag或tag_id参数。前者带有标签条,后者带有标签ID。您还可以用逗号分隔多个项目,或使用否定ID表示您要检索包含以下内容的帖子 贴上特定标签.

$ args =数组(
‘post_type’=> “发布”,
‘tag_id’=> ’22,92,44,-21’
);
$ our_posts =新的WP_Query($ args);

该代码段将检索附有前三个标签中的任何一个但不包含第四个标签的文章。虽然该系统功能强大,可以满足简单的需求,但我通常会使用更为灵活的分类法查询,稍后再讨论.

author,author_name,cat,category_name,s(用于搜索词),post_status,post_type是一些更简单字段的示例。请注意,如果要使用多个值,则某些字段(例如post_status)要求您传递状态数组.

$ args =数组(
‘post_type’=> array(’post’,’page’),
‘post_status’=> array(’draft’,’publish’),
‘猫’=> ‘音乐视频’
);
$ our_posts =新的WP_Query($ args);

上面的示例检索页面或帖子中的任何帖子;已发布或处于草稿状态,并且分配了音乐或视频类别。这可用于显示与音乐或视频相关的任何当前或计划内容的标题.

分类学查询

对于简单的东西,使用提到的参数根据类别或标签检索帖子就足够了,但是如果您具有自定义分类法,或者需要组合多个参数怎么办?答案在于tax_query参数本身就是一个数组。我们先来看一个例子.

$ args =数组(
‘post_type’=> ‘书’,
‘tax_query’=> 数组(
数组(
‘分类法’=> ‘类型’,
‘字段’=> sl,
‘条款’=> array(’scifi’,’thriller’),
‘运算符’=> 禁止进入,
),
数组(
‘分类法’=> ‘作者’,
‘字段’=> ‘ID’,
‘条款’=> 数组(92,883,399),
),
‘关系’=> ‘和’,
),
);
$ query =新的WP_Query($ args);

在这里,我们从“图书”帖子类型中检索了一些帖子,并添加了一些分类参数。使用tax_query中定义的两个数组,我们指定了我们要提取由作者92、883或399编写的书 在科幻或惊悚片中相关参数定义两个数组之间的关系。在我们的案例中,这是“与”关系,这意味着必须同时满足两个条件.

如果我们使用“或”,我们将检索不在科幻或惊悚片类别中的书,或者由指定的三位作者撰写的书。用简单的英语来说,这意味着:我想看我所有的书,除了科幻小说和惊悚小说。但是,我想看所有类型的Terry Pratchett,Douglas Adams和Stephen King的书.

元查询

元查询的结构与分类查询非常相似,但是元查询使用帖子元表中的数据来过滤帖子。以下代码将显示所有带有特色图片的已发布帖子.

$ args =数组(
‘post_type’=> “发布”,
‘meta_query’=> 数组(
数组(
‘密钥’=> ‘_thumbnail_id’,
‘值’=> ”,
‘比较’=> ‘!=’,
),
),
);
$ query =新的WP_Query($ args);

WordPress使用_thumbnail_id字段存储帖子的特色图片ID。因此,如果我们检索该元值不为空的所有帖子,则应该以所有带有特色图片的帖子结束.

这里的秘密是知道如何使用compare属性和类型。您可以使用SQL应当熟悉的多种值:“ =”,“!=”,“>’,‘>=’,‘<‘,’<=’,’LIKE’,’NOT LIKE’,’IN’,’NOT IN’,’BETWEEN’,’NOT BETWEEN’,’EXISTS’(来自WordPress 3.5及更高版本)和’NOT EXISTS’(来自WordPress 3.5)及以上)

当您要比较数字或日期时,type属性通常很重要。可能的值为“ NUMERIC”,“ BINARY”,“ CHAR”,“ DATE”,“ DATETIME”,“ DECIMAL”,“ SIGNED”,“ TIME”,“ UNSIGNED”。比较数字时请记住使用NUMERIC,在其他大多数情况下,您应该没问题.

就像分类法查询一样,您可以堆叠多个需求,然后使用关系参数指定它们之间的关系.

$ args =数组(
‘post_type’=> “发布”,
‘meta_query’=> 数组(
‘关系’=> ‘要么’,
数组(
‘密钥’=> ‘心情’,
‘值’=> array(’happy’,’awesome’),
‘比较’=> ‘在’,
),
数组(
‘密钥’=> ‘收入’,
‘值’=> 500,
‘比较’=> ‘>’,
‘类型’=> ‘数字’
),
),
);
$ query =新的WP_Query($ args);

上面的示例将显示发生某事的假设日记中的帖子。我要么感到高兴或很棒,要么那天赚了500多美元.

日期参数

日期可能会有些复杂,但非常灵活。的 WP_Query文档 有大量示例,如果您需要更多信息.

从特定时间检索帖子非常容易。您可以使用年,月数,w(一年中的星期),天和其他两个参数来指定时间。以下代码将检索2013年3月以来的所有帖子.

$ args =数组(
‘post_type’=> “发布”,
‘年’=> 2013年,
‘月’=> 3
);
$ query =新的WP_Query($ args);

如果您想进入更复杂的时间范围,则需要使用date_query。这使您可以使用熟悉的数组格式轻松指定任意范围。以下示例(由食典委提供)展示了如何检索工作日上午9点至下午5点之间撰写的帖子.

$ args =数组(
‘post_type’=> “发布”,
‘date_query’=> 数组(
数组(
‘小时’=> 9,
‘比较’=> ‘>=’,
),
数组(
‘小时’=> 17,
‘比较’=> ‘<=’,
),
数组(
‘dayofweek’=> 数组(2,6),
‘比较’=> ‘之间’,
),
),
);
$ query =新的WP_Query($ args);

订购结果

列表的显示顺序与其中的元素一样重要。幸运的是,WordPress为我们提供了order_by和order参数。 order参数非常简单,您可以使用ASC或DESC来对升序或降序进行排序.

order_by参数可以具有多个值:“ none”,“ ID”,“ author”,“ title”,“ name”,“ type”,“ date”,“ modified”,“ parent”,“ rand” ,“ comment_count”,“ menu_order”,“ meta_value”,“ meta_value_num”,“ post__in”。按meta_value排序可能特别有用。在这种情况下,请不要忘记也指定meta_key字段.

$ args =数组(
‘post_type’=> ‘绘画’,
‘meta_query’=> 数组(
数组(
‘密钥’=> ‘价钱’,
‘值’=> 50000,
‘比较’=> ‘>’,
‘类型’=> ‘数字’
),
),
‘order_by’=> ‘meta_value_num’,
‘meta_key’=> ‘价钱’
);
$ query =新的WP_Query($ args);

本示例检索价值超过50,000美元的画作,并按价格升序排列。请注意,由于价格存储为数字,因此我使用meta_value_num对结果进行排序,而不是将meta_value用于字符串.

另一个值得一提的订购是post__in。 post__in本身就是一个参数,它允许您指定要检索的帖子ID的数组。默认情况下,WordPress按日期对帖子排序,不保留您在post__in中指定的顺序。如果您也使用post__in作为按值排列的顺序,WordPress将保留该顺序.

$ args =数组(
‘post_type’=> “发布”,
‘post__in’=> 数组(23,441,12,322,34,33),
‘order_by’=> ‘post__in’,
);
$ query =新的WP_Query($ args);

包起来

我希望从WP_Query的介绍可以清楚地知道这确实是一个功能强大的类。它允许您以WP标准的方式使用自己的条件来检索帖子。看看它 文件资料 有关更多信息以及一些出色的属性和方法,此类提供了处理查询和循环的方法.

WP_Query是使WordPress成为出色的通用CMS的一部分-能够以模块化和可自定义的方式从数据库检索对象.

如果您有任何疑问,请在评论中告诉我们!

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map