有什么方法可以检索从以下查询的帖子ID数组:

$latest = new WP_Query( array (
    'orderby'               => 'rand',
    'posts_per_page'        => 3
));

if ( $latest -> have_posts() ) : while ( $latest -> have_posts() ) : $latest -> the_post();

    get_template_part( 'templates/content', 'post' );

endwhile; endif; wp_reset_postdata();



跟进:

我使用wp_list_pluck检索帖子ID数组:

$post_ids = wp_list_pluck( $latest->posts, 'ID' );


,然后使用implode函数将数组转换为字符串:

$post_ids_string = implode( ',', $post_ids );


模棱两可的问题,很抱歉。

评论

瑞克,你的问题模棱两可。发表问题之前,请先明确您要的内容。这将使所有人免于回答无关紧要的内容。您实际上需要以字符串而不是数组的形式返回帖子ID

您的wp_reset_postdata应该位于if语句之外,否则,您可能会在未更改后重新设置发布数据

如果只需要ID,则应认真考虑s_ha_dum的答案。这将返回ID,而不会再从数据库中检索大量其他数据,然后将其丢弃。

#1 楼

尝试

$post_ids = wp_list_pluck( $latest->posts, 'ID' );


阅读wp_list_pluck

评论


如果您还需要每个帖子的全部数据,而不仅仅是帖子ID,那么这将很有用。否则,我将使用@ s-ha-dum的解决方案。

–玛丽安
17年3月31日在8:09

#2 楼

在查询中使用fields参数。


字段(字符串)-要返回的字段。默认情况下,所有字段均返回。还有两个其他选项:
-'ids'-返回帖子ID的数组。
-'id => parent'-返回关联的数组[parent => ID,…]。

https://developer.wordpress.org/reference/classes/wp_query/#return-fields-parameter


$latest = new WP_Query( array (
    'orderby'               => 'rand',
    'posts_per_page'        => 3,
    'fields' => 'ids'
));
var_dump($latest->posts);


评论


这应该是一个可以接受的答案,因为它只查询ID,这比查询所有内容和在新数组中“拔出”(循环并重新存储)它要快得多。

–巴里·库伊(Barry Kooij)
16年2月5日在16:31

也许您需要在执行完普通的wp_query之后获取ID,例如,当您之后合并两个查询时,并且需要ID来排除上一个查询的结果时。

–火车头病
19年8月5日在9:09

感谢您分享此解决方案,在此问题的答案中,这是最有效的。

– Marcos Buarque
20 Nov 26'14:36

#3 楼

如果只需要获取ID,并且没有设置先前的查询对象,则使用@ s-ha-dum中的解决方案比较经济。

这是原因:

switch ( $q['fields'] ) {
    case 'ids':
        $fields = "$wpdb->posts.ID";
        break;
    case 'id=>parent':
        $fields = "$wpdb->posts.ID, $wpdb->posts.post_parent";
        break;
    default:
        $fields = "$wpdb->posts.*";


因为只指定'fields' => 'ids',您得到的只是ID的回报。

如果您使用'fields' => 'id=>parent'(看起来真的很有趣),您还将获得父ID。

使用'fields'参数的任何其他方式对WordPress v4.7都没有任何影响。

但是如果您有示例中的查询,则wp_list_pluck将完成此工作。

#4 楼

我建议这种解决方案
get_posts([
  'posts_per_page' => -1,
  'post_status' => 'publish',
  'post_type' => 'some-custom-post-type',
  'fields' => 'ids',
]);

作为回报,您在内部具有id的数组;)
array (size=5)
  0 => int 81002
  1 => int 77885
  2 => int 77180
  3 => int 74722
  4 => int 73312