在post

时间:2015-09-01 11:21:42

标签: wordpress

在合并两个wp_queries的结果之后,我尝试使用其ID的数组作为post__in的参数用于新的wp_query。但出于某种原因,我得到了奇怪的结果(帖子总数不匹配)。据我所知,我无法将后ID的数组转换为post__in的正确格式(接受一系列ID')。

到目前为止我做了什么:

echo count($first_query->posts);  // returns 101
echo count($second_query->posts); // returns 201

$together = array_merge((array)$first_query->posts,(array)$second_query->posts);

echo count($together);          // returns 302
var_dump($together);            // returns: array(302) { [0]=> object(WP_Post)#6642 (24) { ["ID"]=> int(41) ["post_author"]=> string(1) "1" ["post_date"]=> string(19) "2005-04-01 05:49:22" ["post_date_gmt"]=> string(19) "2005-04-01 05:49:22" ["post_content"]=> string(0) "" ["post_title"]=> string(21) ...

到目前为止一切顺利。当其中一个数组为空时,我已经转换为数组以避免array_merge返回null。现在,我试图在一个新的wp_query中使用一系列ID,如下所示:

$result_args = array(
    'post_type'             => 'post',
    'post__in'              => $ids,    // array(10,11,12 and so on)
    'ignore_sticky_posts'   => 1,
    'post_per_page'         => -1
);

$result = new WP_Query($result_args);

我一直试图通过多种方式将$转换为一个整数数组:

首先尝试

$ids = wp_list_pluck($together, 'ID');
echo count($ids);        // returns 302
var_dump($ids);          // returns array(302) { [0]=> int(41) [1]=> int(44) [2]=> int(47) [3]=> int(89) ...

使用$ ids作为post__in的参数后,wp_query $ result返回错误的帖子总数。

echo count($result);       // returns 10
var_dump($result_args);    // returns array(4) { ["post_type"]=> string(4) "post" ["post__in"]=> array(302) { [0]=> int(41) [1]=> int(44) [2]=> int(47) ...  int(969) } ["ignore_sticky_posts"]=> int(1) ["post_per_page"]=> int(-1) }

第二次尝试

添加'字段' => ' IDS'对于$ first_query和$ second_query,它们都返回ID的数组。

echo count($together);    // returns 302
var_dump($together);      // returns array(302) { [0]=> int(41) [1]=> int(44) [2]=> int(47) [3]=> int(89) 

但是,再次使用数组后post__,返回错误的结果:

echo count($result);      // returns 10

第三次尝试

Imploding ID' s返回一个字符串,post__in无法处理。

echo count($result);      // returns 0

也许我正朝着错误的方向前进,但还有其他问题,但我无法弄清楚是什么,所以任何帮助都会受到赞赏。

解决

'post_per_page'

本来应该的     ' posts_per_page' 现在一切正常。

1 个答案:

答案 0 :(得分:1)

我不明白为什么您不仅仅使用原始查询返回ID,以避免所有这些转换。 WP_Query() has a fields parameter,可用于返回由仅发布ID 组成的数组。在最简单的形式中,查询将如下所示:

// This query returns an array() of post IDs, rather than full post objects
$args = array(
    'fields' => 'ids',
);
$first_query = new WP_Query( $args );

从那时起,您可以执行标准array_merge()(两个查询都会生成数组;因此您不需要将它们转换为(array))。这个合并的数组将只包含帖子ID,并且可以在post__in中直接用于另一个查询(如果需要)。