从WP_Query获取帖子ID?


27

有没有一种方法可以检索从以下查询的帖子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 );

很抱歉这个模棱两可的问题。


瑞克,你的问题模棱两可。在发布问题之前,请非常清楚您想要什么。这将使所有人免于回答无关紧要的内容。您实际上需要以字符串而不是数组
Pieter Goosen 2014年

1
您的wp_reset_postdata邮件应该放在if语句之外,否则您可以在未更改的情况下重置发布数据
Tom J Nowell

1
如果只需要ID,则应认真考虑s_ha_dum的答案。这将返回ID,同时也不会从数据库中检索大量其他数据,然后将它们丢弃。
克里斯·雷

Answers:


43

尝试

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

wp_list_pluck


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

74

fields在查询中使用参数。

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

http://codex.wordpress.org/Class_Reference/WP_Query#Return_Fields_Parameter

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

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

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

2

如果只需要获取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可以完成该工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.