从当前WP_QUERY获取所有帖子ID-不只是当前可见

时间:2018-12-18 作者:Gary Swift

我想从当前查询中获取所有帖子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 执行此操作。

2 个回复
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;

    };

}

相关推荐

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

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