最新的评论帖子应该是博客中的第一篇帖子

时间:2014-07-13 作者:Damith

如果有人发表评论,这篇文章应该是博客的第一篇文章。(论坛就是这样工作的)。

我不想使用论坛插件也。我只需要,当用户提交评论时,这篇文章就会作为我博客的第一篇文章。

有可能吗?

3 个回复
SO网友:Rarst

WordPress post查询本机不支持ordering 按此类特定评论信息,仅按评论计数。其余与评论相关的内容不存储在posts表中,不便于查询。

虽然有可能为此编写SQL,但我认为通过在pre_get_posts 挂钩或其他方式。

SO网友:sabarnix

您可以使用以下代码更改新评论上帖子的post\\u modified\\u日期

add_action( \'wp_insert_comment\', \'update_post_modified_date\', 10, 2 );
function update_post_modified_date(  $comment_id, $comment ) {
  wp_update_post( array( \'ID\' => $comment->comment_post_ID ) );
}
然后在查询帖子时使用modifiedorderby 参数

SO网友:Pieter Goosen

如前所述,Wordpress本机不支持此功能,但这并不意味着它无法实现。

要实现这一点,您需要添加一个自定义query_vars, 并添加自定义sql查询,并通过posts_join posts_orderby 过滤器。此代码已从Filter By Comments 凯文·英格索尔的插件。可以下载完整的插件here. 我已经对它进行了彻底的测试,尽管两年多没有更新,但它仍然有效。

下面是实现这一切的自定义代码

<?php
FilterByComments::getInstance();

class FilterByComments {

    static function getInstance() {
        static $instance;
        return $instance ? $instance : $instance = new self;
    }

    private function __clone() {}


    protected function __construct() {
        add_filter(\'query_vars\', array(&$this, \'query_vars\'));
        add_filter(\'posts_join\', array(&$this, \'posts_join\'));
        add_filter(\'posts_orderby\', array(&$this, \'posts_orderby\'));
    }


    function query_vars($vars) {
        $vars[] = \'orderby_last_comment\';
        return $vars;
    }


    function posts_join($sql) {
        global $wpdb;
        if(get_query_var(\'orderby_last_comment\')) {
            return $sql.\'
                LEFT JOIN (SELECT `comment_post_ID` AS `post`, MAX(`comment_date`) AS `date` FROM `\'.$wpdb->comments.\'` WHERE `comment_approved`="1" GROUP BY `post`) AS `last_comment`
                    ON `last_comment`.`post` = `\'.$wpdb->posts.\'`.`ID`
            \';
        }
        return $sql;
    }

    function posts_orderby($sql) {
        if(get_query_var(\'orderby_last_comment\')) {
            return \'`last_comment`.`date` DESC\'.($sql !== \'\' ? \', \'.$sql : \'\');
        }
        return $sql;
    }
}
?>
通过pre_get_postsWP_Query.您可以直接使用query_vars orderby_last_comment. 要按最新评论排序帖子,只需设置orderby_last_commenttrue1

USING pre_get_posts

function order_by_newest_comment( $query ) {
    if ( $query->is_main_query() && $query->is_home() ) {
        $query->set( \'orderby_last_comment\', true );
    }
}
add_action( \'pre_get_posts\', \'order_by_newest_comment\' );
$the_query = new WP_Query(\'orderby_last_comment=true\');

结束

相关推荐

QUERY_POSTS按多种方式排序

我对query\\u posts orderby multiple ways有问题。我在Wordpress中有一个类别,在那里我需要显示具有排名的第一个帖子,然后按标题显示所有帖子。下面是工作代码,工作正常,但不知道如何连接这些代码。这段代码只显示排名靠前的帖子 query_posts(array(\'cat\' => $category->term_id, \'posts_per_page\' => -1, \'orderby\' => \'meta_value\', \'me