wp_query按元键

时间:2013-12-17 02:29:22

标签: php wordpress

我已经编写了这个循环来引入在过去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天内有多少次观看帖子,而不是在这些日期范围内发布的帖子。

我在思考正确的方向吗?如果是这样,你能告诉我如何解决这个问题吗?

2 个答案:

答案 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天