$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 );
模棱两可的问题,很抱歉。
#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
评论
瑞克,你的问题模棱两可。发表问题之前,请先明确您要的内容。这将使所有人免于回答无关紧要的内容。您实际上需要以字符串而不是数组的形式返回帖子ID您的wp_reset_postdata应该位于if语句之外,否则,您可能会在未更改后重新设置发布数据
如果只需要ID,则应认真考虑s_ha_dum的答案。这将返回ID,而不会再从数据库中检索大量其他数据,然后将其丢弃。