最近两天使用WP_QUERY浏览次数最多的帖子

时间:2016-07-21 作者:markyeoj

您好,我有代码打算在过去2天内获得最多浏览量的帖子,但它似乎不起作用,或者我的代码不正确。我感谢你的帮助。谢谢

  $args = array(
    \'post_type\' => \'post\',
    \'meta_key\' => \'post_views_count\',
    \'orderby\' => \'meta_value_num\',
        \'date_query\' => array(
            array(
                \'after\'  => \'2 days ago\',
            )
    )

);
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {
    echo \'<ul class="posts-list">\';
    while ( $the_query->have_posts() ) {
        $the_query->the_post(); ?>
        <li>
        <?php if ( has_post_thumbnail() ) : ?>
            <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
                <?php the_post_thumbnail(); ?>
            </a>
        <?php endif; ?>

        <div class="content">
            <time datetime="<?php echo get_the_date(DATE_W3C); ?>"><?php the_time(\'d, F Y\') ?></time>
            <span class="comments">
                <a href="<?php comments_link(); ?>" class="comments"><i class="fa fa-comments-o"></i> <?php echo get_comments_number(); ?></a>          
            </span>
            <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title();?></a>
        </div>
        </li>
    <?php }
    echo \'</ul>\';
    /* Restore original Post Data */
    wp_reset_postdata();
} else {
    // no posts found
}

2 个回复
SO网友:Shameem Ali

我也有同样的问题。我已多次搜索此问题。但我找不到解决办法。

获取过去2天浏览次数最多的帖子,不要获取过去2天的帖子

我有一个名为“wp\\u popularpostssummary”的表。

enter image description here

结果将是

enter image description here

因此,通过使用以下自定义查询从该表中获取结果postids

$results = $wpdb->get_results($wpdb->prepare(\'SELECT postid,COUNT(*) AS qy FROM `wp_popularpostssummary` WHERE `view_date` BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK) AND CURRENT_DATE() GROUP BY postid ORDER BY qy DESC\'));
查询结果将是过去一周查看次数最多的帖子的帖子id。然后使用以下foreach循环来获取post id

            $pids = [];

                $results = json_decode(json_encode($results), true);

                foreach ($results as $result) {
                   foreach ($result as $k => $v) {
                       if($k == \'postid\'){
                           array_push($pids, $v);
                       }
                   };

                }
最后,使用post id获取post详细信息。代码如下

                $args = array(
                    \'post_type\'         => \'post\',
                    \'post_status\'       => \'publish\',
                    \'posts_per_page\'    => \'10\',
                    \'orderby\'           => \'post__in\',
                    \'post__in\'          => $pids

                );


                $query = new WP_Query( $args );   if ( $query->have_posts() ) {
                    // The Loop
                    while ( $query->have_posts() ) { //code here
                     }
                 }
根据需要更改日期持续时间。我希望这将有助于任何人在功能<如果有疑问,请告诉我。

SO网友:Marc

尝试调整$args. 您需要获取两天前的日期,然后将年、月和日作为数组传递到after参数中。

尝试以下操作:

$date = strtotime ( \'-2 day\' ); // Date from two days ago

$args = array(
    \'post_type\' => \'post\',
    \'meta_key\' => \'post_views_count\',
    \'orderby\' => \'meta_value_num\',
    \'date_query\' => array(
        array(
            \'after\' => array(
                \'year\'  => date(\'Y\', $date ),
                \'month\' => date(\'m\', $date ),
                \'day\'   => date(\'d\', $date ),
            ),
        )
    )
);
有关的更多文档WP_Query 及其论点,包括date_query 可以找到here.

相关推荐

GET_POSTS查询大约需要40秒来执行

我在get\\u帖子中有一个元查询,它需要花很长时间才能完成。它工作得很好,但只是时间太长了。我有一个名为event. 在每个event 发布后,有自定义元数据:post\\U sort\\U日期(事件日期YmdHis 格式,用于排序)我需要做的是获取下一个事件,该事件相对于$year 和$month 变量。所以如果$year = 2021 和$month = 10 (2021 10月)然后应该在2021 11月或之后找到第一个事件。我下面的查询很好,但很慢。执行大约需要40秒,我不知道为什么。$next