限制从 WP_Query 或“获取”函数返回的 wordpress 字段
Posted
技术标签:
【中文标题】限制从 WP_Query 或“获取”函数返回的 wordpress 字段【英文标题】:Limiting returned wordpress fields from WP_Query or 'get' functions 【发布时间】:2014-12-12 18:48:30 【问题描述】:希望限制 WP 查询的返回字段,以帮助加快服务器的响应速度并减少检索的数据量。对于我正在使用的查询,它最多只需要3个数据字段,其余的通过循环中的ACF get_field_object 引入。我正在使用的其他函数,例如 get_posts 或 get_terms 具有字段选项,但仅限于少数东西,例如仅 'slug' 或 'id => slug'。
我习惯用 Cakephp 开发,它可以选择指定要返回的每个字段,但是项目需要 wordpress 来实现其他功能,所以我很有限。
TL;DR 需要加快从 Wordpress 获取帖子的速度
【问题讨论】:
字段是什么?它们都是定制的吗? 我想要限制的字段是默认出现的字段,例如“post_content”、“guid”、“post_modified”等。 Fetch Selected Fields in WP_Query Class in WordPress 的可能重复项 我可能会问与您上面引用的相同问题,但为他提供的答案不符合我的需求。他的回答提供了一种在 WP_Query 返回后访问“标题”和“描述”的方法。另一方面,我正在寻找专门删除查询中返回的所有其他数据,除了少数几个。旨在减少发回的数据量。 你有 3 个返回选项:'all ids, id=>parent' 开发者文档:developer.wordpress.org/reference/classes/wp_query/… 【参考方案1】:我在查询中使用了 fields 参数并在此查询上运行 get posts。 例如:在我的例子中,我只需要获取多个类别的 Post id,所以我创建了一个这样的查询:
$the_query = new WP_Query( array(
'ignore_sticky_posts' => 1,
'posts_per_page' => -1,
'cat' => '2,6,7' ,
'fields' => 'ids',
'post_type' => 'post',
'post_status' => 'publish',
)
);
在这个查询上运行 get_posts:
$posts = $the_query->get_posts();
$posts 将仅获取特定类别帖子的 ID。
或者也可以使用标准和流行的方式来完成,即通过运行 have_posts 循环:
if ( $the_query->have_posts() )
while ( $the_query->have_posts() )
$the_query->the_post();
$post_id_array[] = get_the_ID();
这是帮助加快服务器响应速度和减少检索数据量的两种方法
【讨论】:
【参考方案2】:WP_Query
将返回对象......所以它非常快。但是,如果您真的想限制返回的内容,可以使用 Return Fields Parameter 或 WP_Query
来实现。
【讨论】:
我已经看过了,不幸的是它只提供了 3 个选项,比我需要检索的内容少了大约 1 或 2 个字段。【参考方案3】:这是我为限制来自 WP_Query 的字段所做的,尤其是当我想对它们进行 json_encode 时。 $return
变量包含我的帖子数组,其中只有 $fields
数组中列出的字段。
$query = new WP_Query( array( 'post_type' => 'my_custom_type' ) );
$return = array();
$fields = array('post_title', 'ID'); //list of fields I want in $return
$posts = $query->get_posts();
foreach($posts as $post)
$newPost = array();
foreach($fields as $field)
$newPost[$field] = $post->$field;
$return[] = $newPost;
【讨论】:
这不会优化查询,您可以使用简单的数组映射轻松实现实际操作【参考方案4】:我不知道它会有多大帮助,但下面是我如何从 CPT 获得扁平阵列。这不是最快的,但可能会更糟。我正在使用 ACF 获取自定义字段,但您可以只取回 slug 或者您可以取回多个字段:
// Query Jobs Args
$query_args = array(
'post_type' => 'job',
'posts_per_page' => -1,
'fields' => 'ids'
);
// Get Jobs Query
$query = new WP_Query($query_args);
// Loop Persistent Vars
$job_ids = array();
// Loop Over Jobs
foreach($query->posts as $post_id)
$job_ids[] = get_field('job_id', $post_id);
// Do stuff with flattened array of job ids
【讨论】:
【参考方案5】:有趣的是,您可以通过 WP Rest API 使用 _fields 参数来做到这一点
https://yoursite.com/wp-json/wp/v2/posts?_fields=author,id,excerpt,title,link
有关 API 的更多信息,请点击此处:https://developer.wordpress.org/rest-api/
【讨论】:
以上是关于限制从 WP_Query 或“获取”函数返回的 wordpress 字段的主要内容,如果未能解决你的问题,请参考以下文章
在自定义分类模板中的 WP_Query 期间查询(2)ACF 发布对象