Get post ids from WP_Query?

时间:2014-10-21 作者:Rich

是否有一种方法可以检索从以下位置查询的帖子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();
<小时>

Follow Up:

我用过wp_list_pluck 要检索帖子ID数组,请执行以下操作:

$post_ids = wp_list_pluck( $latest->posts, \'ID\' );
然后使用内爆函数将数组转换为字符串:

$post_ids_string = implode( \',\', $post_ids );
很抱歉问了个模棱两可的问题。

5 个回复
最合适的回答,由SO网友:shanebp 整理而成

Try

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

Read wp_list_pluck

SO网友:s_ha_dum

使用fields 查询中的参数。

字段(字符串)-返回哪些字段。默认情况下返回所有字段。还有两个其他选项:-“ids”-返回post 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);

SO网友:Jankyz

我建议使用此解决方案

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

SO网友:prosti

如果只需要获取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\' 你不会得到比身份证更多的回报。

如果你愿意\'fields\' => \'id=>parent\' (看起来很有趣)您还将获得家长ID。

任何其他方式使用\'fields\' 参数将不会对WordPress v4产生任何影响。7.

但如果您有示例中的查询wp_list_pluck 将完成这项工作。

SO网友:Joy

为什么不使用get\\u the\\u ID()函数?只要共享循环代码,它就会在查询中显示所有post ID。

// The Loop
    if ( $the_query->have_posts() ) {
        while ( $the_query->have_posts() ) {
            $the_query->the_post();     
                    
            echo \'<li>\' . get_the_ID() . \'</li>\';
        }
    } else {
        // no posts found
        $string = "no posts found";
    }

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post