我想从当前查询中获取所有帖子ID。我知道如何使用以下方法获取当前页面的所有ID:
global $wp_query;
$post_ids = wp_list_pluck( $wp_query->posts, "ID" );
这将为我提供一个包含所有帖子ID的数组,但仅限于当前页面。
如何获取所有ID,但不受限制\'posts_per_page\'
. (我不想通过更改“每页帖子数”来修改查询。)
我知道全球$wp_query
例如:
我们将展示“. $wp_query->query_vars[\'posts_per_page\'] .
“如果可能,每页的帖子。
我们总共需要“. $wp_query->max_num_pages .
“”页面以显示结果。
其他详细信息:
我正在尝试获取WooCommerce产品ID并连接到woocommerce_archive_description
执行此操作。
SO网友:Joe
我知道这篇文章有点旧,但我自己刚刚提到了这个问题。
给定一个main\\u查询,查找它的所有post ID,不受分页限制。
我使用此函数返回主wp\\U查询的所有术语。
/*
* Get terms for a given wp_query no paging
* */
function get_terms_for_current_posts($tax=\'post_tag\',$the_wp_query=false){
global $wp_query;
// Use global WP_Query but option to override
$q = $wp_query;
if($the_wp_query){
$q = $the_wp_query;
}
$q->query_vars[\'posts_per_page\'] = 200;// setting -1 does not seem to work here?
$q->query_vars[\'fields\'] = \'ids\';// I only want the post IDs
$the_query = new WP_Query($q->query_vars);// get the posts
// $the_query->posts is an array of all found post IDs
// get all terms for the given array of post IDs
$y = wp_get_object_terms( $the_query->posts, $tax );
return $y;// array of term objects
}
希望这能帮助你或其他人在这个问题上绊倒。
SO网友:amarinediary
想分享我的两分钱。
事实上$wp_query
将只返回与当前Pagination Parameters.
正如Milo在评论中指出的那样,您实际上可以使用一组不同的分页参数创建一个新查询(例如:nopaging
, posts_per_page
, posts_per_archive_page
...).
我们可以镜像主要查询参数,并将它们与新的分页参数合并。因为我们只对POST ID感兴趣,所以可以使用fields query parameter
仅返回POST ID。
/**
* Retrieve the IDs of the items in the main WordPress query.
*
* Intercept the main query, retrieve the current parameters to create a new query.
* Return the IDs of the items in the main query as an array.
*
* @see https://wordpress.stackexchange.com/a/400947/190376
*
* @return Array The IDs of the items in the WordPress Loop. False if $post is not set.
*
* @since 1.0.0
*/
public function wpso_323280() {
if ( is_main_query() ) {
global $wp_query;
$buffer_query = $wp_query->query;
$args = array(
\'nopaging\' => true,
\'fields\' => \'ids\',
);
$custom_query = new WP_Query( array_merge( $buffer_query, $args ) );
wp_reset_postdata();
return $custom_query->posts;
};
}