按时间段(最近12小时、过去24小时等)发表评论最多的帖子

时间:2021-03-21 作者:robert0

我有一个很好用的代码。

 <?php 
      $result = $wpdb->get_results("SELECT comment_count, ID, post_title FROM $wpdb->posts ORDER BY comment_count DESC LIMIT 0 , 25"); // NUMBER OF POSTS
         foreach ($result as $topten) {
             $postid = $topten->ID;
             $title = $topten->post_title;
             $commentcount = $topten->comment_count;
             if ($commentcount != 0) {
      ?>
        <a href="<?php echo get_permalink($postid); ?>"><span class="tags"> <?php echo $title ?></span></a>
   
   <?php } } ?>
现在,它按评论数(一直)显示(排序)最受欢迎的帖子。

我知道WordPress理解命令“period”:

   period=1hourago
基本上,我试图让上面的代码与句点一起工作,以便我可以定义:

24小时行程

12小时

等等

我知道我需要以某种方式将其集成到代码中:

 \'date_query\' => [
        [
           
        ]
    ],
但我似乎找不到一种方法来把所有的东西放在一起。

我的想法来自:https://www.bitochat.com

需要帮助。

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

因此,如果您想获取在过去xx小时内(例如12小时)发表评论的帖子,请尝试以下操作之一:

请注意,我只选择已发布的帖子(post_status = \'publish\') 以及post 类型(post_type = \'post\').

只需替换$hours 使用您喜欢的小时数

使用TIMESTAMPDIFF().

$hours = 12;

$result = $wpdb->get_results( $wpdb->prepare( "
    SELECT p.comment_count, p.ID, p.post_title
        FROM $wpdb->posts p
        INNER JOIN $wpdb->comments c ON c.comment_post_ID = p.ID
    WHERE p.post_type = \'post\'
        AND p.post_status = \'publish\'
        AND ( TIMESTAMPDIFF( HOUR, c.comment_date, NOW() ) <= %d )
    GROUP BY p.ID
    ORDER BY p.comment_count DESC
    LIMIT 0, 25
", $hours ) );
comment_date >= <date-time xx hours ago>.

$hours = 12;

$timestamp = current_time( \'timestamp\' );
$date_ago = date( \'Y-m-d H:i:s\', $timestamp - $hours * HOUR_IN_SECONDS );

$result = $wpdb->get_results( $wpdb->prepare( "
    SELECT p.comment_count, p.ID, p.post_title
        FROM $wpdb->posts p
        INNER JOIN $wpdb->comments c ON c.comment_post_ID = p.ID
    WHERE p.post_type = \'post\'
        AND p.post_status = \'publish\'
        AND c.comment_date >= %s
    GROUP BY p.ID
    ORDER BY p.comment_count DESC
    LIMIT 0, 25
", $date_ago ) );