WordPress get_posts不适用于大量帖子

时间:2018-10-16 12:02:52

标签: wordpress

我需要查询所有WordPress帖子,并创建一个数组,其中包含所有帖子的自定义字段的所有值。

这是我以前用于少量帖子的内容。

//Get all the posts
$args = array(
    'post_type' => 'my_custom_post_type',
    'numberposts' => -1,
    'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit'),
);
$posts = get_posts( $args );

//Get all the values and put them in an array
$custom_field_array = array();
foreach ($posts as $post) {
    $custom_field_array[] = (int)get_post_meta( $post->ID, 'my_custom_field', true );
}

当帖子的数量不是很大时,效果很好,但是我现在需要获得5,000多个帖子(并且还在不断增长)的my_custom_field值。

一旦帖子数量过大,get_posts将不会返回任何内容。不确定所需的内存是否太大,我不确定,但是现在我需要获取5,000多个帖子的my_custom_field值,而对于那么多帖子却不起作用。

我还能如何获得这些值?

或者还有其他方法可以使get_posts处理大量帖子吗?

1 个答案:

答案 0 :(得分:0)

您还可以通过MYSQL Select查询获取所有帖子。

 global $wpdb;
    $querystr = "
        SELECT $wpdb->posts.* 
        FROM $wpdb->posts, $wpdb->postmeta
        WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
        AND $wpdb->postmeta.meta_key = 'my_custom_field' 
        AND $wpdb->posts.post_type = 'my_custom_post_type'
        ORDER BY $wpdb->posts.post_date DESC
     ";

     $pageposts = $wpdb->get_results($querystr, OBJECT);

     print_r($pageposts);