WP_Query
无法执行一次所需的复杂查询。从一个月里选出10个,从另一个月里选出10个,然后从另一个月里选出5个,然后选出3个,然后选出1个UNION
s 和WP_Query
不能那样做。
我可以看到您有两个选择:
手动编写SQL以获取帖子ID
s、 这并不复杂,但也不是微不足道的。然后通过岗位ID
s到WP_Query
像post__in
转换为post对象运行一系列不同的查询和循环。当然是最简单的解决方案。WP_Query
accepts year
and monthnum
arguments.首先,您可以通过这样做来节省一些精力:
$qrypattern = "SELECT {$wpdb->posts}.ID FROM {$wpdb->posts}
INNER JOIN {$wpdb->postmeta} ON ({$wpdb->posts}.ID = {$wpdb->postmeta}.post_id)
WHERE 1=1
AND {$wpdb->posts}.post_type = \'post\'
AND ({$wpdb->posts}.post_status = \'publish\')
AND ({$wpdb->postmeta}.meta_key = \'your_date\'
AND {$wpdb->postmeta}.meta_value BETWEEN \'%s\' AND \'%s\')
GROUP BY {$wpdb->posts}.ID
ORDER BY {$wpdb->postmeta}.meta_value ASC LIMIT %d";
$dates = array(
array (
\'s\' => \'startdate\',
\'e\' => \'enddate\',
\'c\' => 10
),
array (
\'s\' => \'startdate\',
\'e\' => \'enddate\',
\'c\' => 5
)
);
$union = array();
foreach ($dates as $v) {
$union[] = \'(\'.sprintf($qrypattern,$v[\'s\'],$v[\'e\'],$v[\'c\']).\')\';
}
$qry = implode(\' UNION \',$union );
显然,
startdate
和
enddate
是填充值。这些必须与您的数据相匹配。希望数据以某种形式进行适当排序——UNIXTIME或YYYY-MM-DD,诸如此类。
没有承诺该查询的详细信息。我必须用真实数据测试它,以确保它正常工作。仅将其视为一个示例。
您可能可以对过滤器执行类似的操作,但在这种情况下,我看不出有什么意义。我认为这将是一个比它的价值更多的麻烦。