Wordpress sql查询最后评论日期

时间:2013-07-09 14:52:41

标签: php sql wordpress

我想获得有关帖子ID的最新评论的日期gmt。结果我想得到一个字符串。

有人可以帮助我如何将结果设置为字符串:

function GetLastCommentDate( $postId ) {
        global $wpdb;
        $dateOutput = '0000-00-00 00:00:00';

        $commentRes= $wpdb->get_results("SELECT DISTINCT `comment_date_gmt` FROM `wp_comments` WHERE `comment_approved` ='1' AND `comment_post_ID` = '". $postId. "' ORDER BY `comment_date_gmt` DESC LIMIT 1");
        if(!empty($commentRes)) {
            $dateOutput =  ...........
        }
        return $dateOutput;
    }

答案是这样的:

$commentRes= $wpdb->get_results("SELECT DISTINCT `comment_date_gmt` as `comment_date_gmt` FROM `wp_comments` WHERE `comment_approved` ='1' AND `comment_post_ID` = '". $postId. "' ORDER BY `comment_date_gmt` DESC LIMIT 1");
        if(!empty($commentRes)) {
            foreach($commentRes as $comment) {
                $dateOutput=$comment->comment_date_gmt;
            }
        }
        return $dateOutput;

但如何避免foreach循环?只有一行(sql限制设置为1)。

3 个答案:

答案 0 :(得分:1)

您无需直接查询wordpress数据库。 WP提供了一个API来检索它。

 $comments = get_comments( array(
    'post_id' => $post->ID,
    'orderby' => 'comment_date_gmt',
    'status' => 'approve', 
    'number' => 1 
  ) );

查看此API reference。将数字指定为1仅返回最后一条注释。

最后评论的日期值可以检索为$ comments [0] ['date']

现在您想从外部使用此功能,请在PHP代码顶部包含以下内容

require('/the/path/to/your/wp-blog-header.php');

查看this wordpress doumentation

如果出现循环错误,请尝试添加此代码。

循环从这里开始:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

并在此结束:

<?php endwhile; else: ?>
 <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>

答案 1 :(得分:0)

我想你想要这样的东西;

$commentRes= $wpdb->get_row(
      "SELECT `comment_date_gmt` FROM `wp_comments` ".
      "WHERE `comment_approved` ='1' AND `comment_post_ID` = '$postId' ".
      "ORDER BY `comment_date_gmt` DESC LIMIT 1");

if(!empty($commentRes))
    $dateOutput = date("Y-m-d H:i:s", $commentRes->comment_date_gmt);

答案 2 :(得分:0)

我在寻找其他东西时偶然发现了这一点。我知道这个问题已经过时了,而且也有问题,但有人可以像我一样找到它,并且我想添加另一个更新的解决方案。

function GetLastCommentDate( $postId ) {
    $dateOutput = false; //this will make easier to check if there are no comments
    //get_comments() args https://codex.wordpress.org/Function_Reference/get_comments
    $args = array(
         'post_id'  => $postId, //just comments of this post
         'number'   => 1, //just one comment
         'order_by' => 'comment_date_gmt', //order by comment date gmt
         'order'    => 'DESC', //latest first
         );
    //retrieve comments
    $comments = get_comments($args);
    if ($comments){
       $dateOutput = $comments[0]->comment_date;
    }
    return $dateOutput;
}

你可以在任何你想要的地方使用它:

$postId = '12345';
$lastCommentDate = GetLastCommentDate($postId) ?: 'Never';
echo $lastCommentDate;