希望限制WP查询的返回字段,以帮助加快服务器的响应并减少检索的数据量。对于我正在使用的查询,它只需要最多3个数据字段,其余的数据通过循环中的ACF get_field_object引入。我正在使用的其他函数,例如get_posts或get_terms,都有字段选项,但仅限于少数事情,例如'slug'或'id =>蛞蝓”。
我习惯在CakePHP中进行开发,它可以选择指定要返回的每个字段,但是项目需要wordpress来获取其他功能,因此我非常有限。
TL; DR需要加快从Wordpress获取帖子
答案 0 :(得分:2)
WP_Query
将返回对象......所以它非常快。但是,如果您确实要限制返回的内容,则可以使用WP_Query
的{{3}}来执行此操作。
答案 1 :(得分:1)
这就是我为限制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;
}
答案 2 :(得分:0)
我在查询中使用了fields参数,并在此查询上运行获取帖子。 例如:在我的情况下,我只需要为多个类别获取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。
或者它也可以使用标准和流行的方式完成,即通过运行has_posts循环:
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
$post_id_array[] = get_the_ID();
}
}
这两种方法可以帮助您加快服务器的响应并减少检索的数据量
答案 3 :(得分:0)
我不知道它会有多大帮助,但下面是我如何从 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
答案 4 :(得分:-1)
有趣的是,您可以使用 _fields 参数通过 WP Rest API 执行此操作
https://yoursite.com/wp-json/wp/v2/posts?_fields=author,id,excerpt,title,link
有关 API 的更多信息,请访问:https://developer.wordpress.org/rest-api/