限制每月WP_QUERY中的帖子数量

时间:2013-06-06 作者:Sergey

我如何限制循环中每月的帖子数量,如下所示:

今天是六月。在循环中,6月和5月应该有十篇最受欢迎的帖子(基于自定义字段page\\u视图),4月有五篇,3月有三篇,然后每月有一篇最受欢迎的帖子。

非常感谢。

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

WP_Query 无法执行一次所需的复杂查询。从一个月里选出10个,从另一个月里选出10个,然后从另一个月里选出5个,然后选出3个,然后选出1个UNIONsWP_Query 不能那样做。

我可以看到您有两个选择:

手动编写SQL以获取帖子IDs、 这并不复杂,但也不是微不足道的。然后通过岗位IDs到WP_Querypost__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 );
显然,startdateenddate 是填充值。这些必须与您的数据相匹配。希望数据以某种形式进行适当排序——UNIXTIME或YYYY-MM-DD,诸如此类。

没有承诺该查询的详细信息。我必须用真实数据测试它,以确保它正常工作。仅将其视为一个示例。

您可能可以对过滤器执行类似的操作,但在这种情况下,我看不出有什么意义。我认为这将是一个比它的价值更多的麻烦。

结束

相关推荐

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

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