限制从WP_Query返回的wordpress字段或'得到'功能

时间:2014-10-17 08:15:28

标签: wordpress loops slug wp-query

希望限制WP查询的返回字段,以帮助加快服务器的响应并减少检索的数据量。对于我正在使用的查询,它只需要最多3个数据字段,其余的数据通过循环中的ACF get_field_object引入。我正在使用的其他函数,例如get_posts或get_terms,都有字段选项,但仅限于少数事情,例如'slug'或'id =>蛞蝓”。

我习惯在CakePHP中进行开发,它可以选择指定要返回的每个字段,但是项目需要wordpress来获取其他功能,因此我非常有限。

TL; DR需要加快从Wordpress获取帖子

5 个答案:

答案 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/