我已经编写了这个循环来引入在过去30天内获得最多视图的帖子(将视图计数记录到数据库作为自定义元键)。
虽然,在考虑了一点之后,我不确定我是以'正确'的方式,或者至少是最合乎逻辑的方式。
<?php
// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
// posts in the last 30 days
$where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";
return $where;
}
add_filter( 'posts_where', 'filter_where' );
$popularpost = new WP_Query( array(
'posts_per_page' => 33,
'meta_key' => 'wpb_post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC'
) );
remove_filter( 'posts_where', 'filter_where' ); ?>
<?php if ( $popularpost->have_posts() ) : ?>
<?php while ( $popularpost->have_posts() ) : $popularpost->the_post(); ?>
<article <?php post_class('item-post block'); ?> id="post-<?php the_ID(); ?>">
<?php the_title (); ?>
</article> <!-- end div post -->
<?php endwhile; wp_reset_query(); ?>
<?php endif; ?>
因此,正如您所看到的,我将日期范围限制为30天,按meta_value_num排序帖子并获得33个帖子。
所以,从逻辑上讲,发生的事情是过去30天内发布的任何帖子都会按照他们有多少次观看的顺序显示在这里。 让我思考的是,当我创建一个页面来拉动过去7天中查看次数最多的33个帖子时,它们是相同的。明显。
所以我认为我想做的是根据他们在过去30天/ 7天内有多少次观看帖子,而不是在这些日期范围内发布的帖子。
我在思考正确的方向吗?如果是这样,你能告诉我如何解决这个问题吗?
答案 0 :(得分:1)
如果您正在运行WordPress 3.7或更高版本,则现在可以使用date_query
。未经测试,但您的查询将类似于:
$popularpost = new WP_Query( array(
'posts_per_page' => 33,
'meta_key' => 'wpb_post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'date_query' => array(
array(
'after' => '1 month ago',
'column' => 'post_date_gmt', //posted within one month
),
)
)
);
答案 1 :(得分:0)
$where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";
strtotime('30天')=现在+30天