到目前为止,在本系列文章中,您已经了解了可以与WP_Query
类一起使用的参数选择,可以根据帖子类型,类别,标签,元数据,日期,状态等选择帖子。
在这本有关WP_Query
参数的最终教程中,我将介绍一些较不常用的参数,这些参数可以为您的查询提供更大的灵活性。
我们将在此处介绍的参数适用于:
- 作者
- 搜索
- 密码
- 权限
- 快取
- 返回字段
在开始之前,让我们快速回顾一下如何使用WP_Query
编码参数。
WP_Query中的参数工作原理回顾
在主题或插件中编码WP_Query
时,需要包括四个主要元素:
- 查询参数,使用本教程将介绍的参数
- 查询本身
- 循环
- 完成:关闭if和while标签并重置发布数据
实际上,这将类似于以下内容:
<?php
$args = array(
// Arguments for your query.
);
// 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();
?>
参数是什么告诉WordPress从数据库中获取什么数据,这就是我将在这里介绍的数据。 因此,我们在这里只关注代码的第一部分:
$args = array(
// Arguments for your query.
);
如您所见,参数包含在数组中。 在学习本教程时,您将学习如何对它们进行编码。
编写您的论点
有一种特定的方式可以对数组中的参数进行编码,如下所示:
$args = array(
'parameter1' => 'value',
'parameter2' => 'value',
'parameter3' => 'value'
);
您必须将参数及其值用单引号引起来,并在它们之间使用=>
,并用逗号分隔。 如果您弄错了,WordPress可能不会将所有参数添加到查询中,或者会出现白屏。
作者参数
您可以使用四个参数来查询作者:
-
author
( int ):使用作者ID -
author_name
( 字符串 ):使用“ user_nicename”(非名称) -
author__in
( 数组 ):使用作者ID -
author__not_in
( array )
第一个是author
,您可以通过提供作者的ID来查询一个或多个作者的帖子:
$args = array(
'author' => '2'
);
上面的代码按ID为2
的作者查询所有帖子。
您还可以使用字符串来查询多个作者的帖子:
$args = array(
'author' => '1, 2'
);
如果author_name
名称查询,则可以使用author_name
参数:
$args = array(
'author_name' => 'rachelmccollin'
);
此参数将数据库中user_nicename
字段中的值作为参数,在“用户”管理屏幕中显示为昵称:

请注意,由于这是可由用户编辑的,因此如果您认为用户可能会更改它,那么使用author
参数将更加安全。
您还可以按作者列表查询帖子:
$args = array(
'author__in' => array(
'1',
'2'
)
);
上面的代码将查询两名作者的帖子:ID为1
和2
,为您提供与我在上述author
参数中使用的字符串相同的结果。
最后,您可以使用author__not_in
参数排除一个或多个作者的author__not_in
。 下面的参数查询除作者1
以外的所有帖子:
$args = array(
'author__not_in' => array( '1' )
);
或者,您可以排除多个作者:
$args = array(
'author__not_in' => array(
'1',
'2'
)
);
或者,您可以使用author
参数,并在作者ID前面使用减号以排除作者:
$args = array(
'author' => '-2'
);
搜索参数
仅有一个搜索参数s
。 使用它来查询与搜索词匹配的帖子。 例如,要查询包含关键字“我最喜欢的食物”的帖子,您可以使用以下代码:
$args = array(
's' => 'my favorite food'
);
例如,您可能会发现这对于搜索具有相似关键字的相关帖子很有用。
密码参数
您可以使用两个密码参数来查询带有和不带有密码保护的帖子:
-
has_password
( bool ) -
post_password
( 字符串 )
第一个参数has_password
允许您查询带有或不带有密码保护的帖子。 因此,要查询受密码保护的帖子:
$args = array(
'has_password' => true
);
对于没有密码的帖子:
$args = array(
'has_password' => false
);
您还可以使用post_password
参数通过密码本身进行查询:
$args = array(
'post_password' => 'mypassword'
);
权限参数
权限只有一个参数perm
,可用于查询当前用户有权阅读的帖子。 它采用'readable'
值,并旨在与其他参数组合。
因此,要查询受密码保护的帖子并仅在用户具有适当权限的情况下显示它们,您可以使用以下命令:
$args = array(
'has_password' => true,
'perm' => 'readable'
);
或者,如果当前用户有权查看草稿,则可以使用以下方法:
$args = array(
'post_status' => 'draft',
'perm' => 'readable'
);
缓存参数
有三个缓存参数,可防止将查询检索到的数据添加到缓存中:
-
cache_results
( boolean ):发布信息缓存 -
update_post_meta_cache
( boolean ):发布元信息缓存 -
update_post_term_cache
( boolean ):后期信息缓存
这三个参数的默认值为true
:如果要将数据添加到缓存中,则不需要使用它们。
因此,要显示product
帖子类型的所有帖子,但不将帖子信息添加到缓存中,可以使用以下方法:
$args = array(
'post_type' => 'product',
'cache_results' => false
);
通常,您不应使用这些参数,因为将过帐数据添加到缓存是一种很好的做法。 但是,您有时可能希望检索帖子,以便仅使用某些帖子数据,在这种情况下,不需要缓存中的其余帖子数据。 例如,当您只想输出带有链接的帖子标题列表时,在这种情况下,您不需要将帖子数据或元数据添加到缓存中:
$args = array(
'post_type' => 'product',
'update_post_meta_cache' => false,
'update_post_term_cache' => false
);
返回字段参数
您可以使用fields
参数来指定要从查询中返回的字段。 这样可以保存从数据库中的字段返回的数据,而在循环中输出数据时则不需要这些字段。
默认值为返回所有字段,但是您可以通过使用fields
参数的两个选项来限制此范围。 首先, 'ids'
参数:
$args = array(
'fields' => 'ids'
);
这只会返回帖子ID的数组,而不会返回其他字段。 如果要在循环中输出任何内容(例如帖子标题),则必须使用诸如get_the_title ($post->ID);
函数get_the_title ($post->ID);
输出标题,这是处理问题的漫长方式。
您可以使用的另一个参数获取带有子帖子ID的帖子ID的关联数组:
$args = array(
'fields' => 'id=>parent'
);
您将使用此查询根据您的其他参数及其子级查询帖子。
摘要
WP_Query
系列的这一部分介绍了WP_Query
类的最后一组参数。 您可以使用它们来按作者,密码保护状态或密码本身和搜索词查询帖子,以及设置是否将查询结果添加到缓存中以及查询返回的字段。
在本系列的下一部分中,您将看到在主题或插件中使用WP_Query
一些有效示例。
翻译自: https://code.tutsplus.com/tutorials/wp_query-arguments-author-search-password-permissions--cms-23206