Как вывести последние из комментируемых постов с последними комментариями

Пользователь gelez посоветовал:

Для вашего блога есть совет. На главной, у вас выводятся последние комментарии, если в одной теме идет постоянное общение, то комментарии других тем просто скрываются. Полезнее, как мне кажется, сделать отображение одного последнего комментария для одной темы, и тогда в вашем примере, будут отображаться последние комменты с пяти тем, а сейчас там я и вы настрочили комментарии )))

Да, при выводе последних комментариев при большой активности в одном посте получается так, что комментарии из этого поста заполняют весь список последних комментариев, ограниченный определенным количеством, и у посетителей складывается впечатление, что комментируется только один пост. На самом деле могут комментироваться несколько постов, просто если в одном из них идет активное обсуждение, то оно заполняет весь список последних комментариев на главной странице. Поэтому в данном случае будет полезнее выводить не список последних комментариев, а список постов, которые были недавно прокомментированы.

Воспользовавшись советом пользователя, я переделал список последних комментариев, превратив его в показатель последней активности комментаторов в постах — теперь отображаются не просто последние комментарии, а посты, которые были недавно прокомментированы, дополненные последними комментариями из этих постов. Думаю, что такой вывод более показателен и информативен.

Как вывести последние из комментируемых постов с последними комментариями

Если вы хотите выводить такой список активности у себя в блоге, то я вам расскажу, как его сделать.

Для вывода списка нужно научиться выводить определенное количество постов, сортируя их по датам последних комментариев. Это можно сделать с помощью параметров в запроса query, которые помогут сортировать посты в порядке даты публикации последнего комментария. Чтобы не выдумывать велосипед, который уже давно катается по улицам, я воспользовался кодом, который придумал Kevin Ingersoll для плагина Filter By Comments. Плагин давний, но продолжает работать, так как не имеет привязок к каким-то версиям WordPress, а всего лишь создает несколько фильтров, с помощью которых можно сортировать посты по дате последнего комментария и количеству комментариев.

Добавьте в файл functions.php следующий код:

// construct
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_fields', array(&$this, 'posts_fields'));
add_filter('posts_where', array(&$this, 'posts_where'));
add_filter('posts_join', array(&$this, 'posts_join'));
add_filter('posts_orderby', array(&$this, 'posts_orderby'));
}
function query_vars($vars) {
$vars[] = 'comment_count';
$vars[] = 'comment_count_compare';
$vars[] = 'orderby_last_comment';
$vars[] = 'orderby_last_activity';
return $vars;
}
function posts_fields($sql) {
global $wpdb;
if(get_query_var('orderby_last_activity')) {
// might be faster, but inacodeurate when post date is altered, i.e. future-publish posts
//return $sql.', IFNULL(`last_comment`.`date`, `'.$wpdb->posts.'`.`post_date`) AS `last_activity`';
return $sql.', GREATEST(`'.$wpdb->posts.'`.`post_date`, IFNULL(`last_comment`.`date`, 0)) AS `last_activity`';
}
return $sql;
}
function posts_where($sql) {
global $wpdb;
if(is_numeric($count = get_query_var('comment_count'))) {
$compare = get_query_var('comment_count_compare');
return ($sql !== '' ? $sql.' AND ' : '').$wpdb->prepare('`'.$wpdb->posts.'`.`comment_count` '.(in_array($compare, array('!=', '>', '>=', '<', '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 : '');
}
elseif(get_query_var('orderby_last_activity')) {
return '`last_activity` DESC'.($sql !== '' ? ', '.$sql : '');
}
return $sql;
}
}

Все, теперь вы можете выводить посты в порядке их комментирования. Ну а чтобы показать не просто голый список постов, а еще и вывести к каждому посту последний комментарий, я собрал следующий код, который нужно вставить в файл, отвечающий за вывод этого списка (у меня это шаблон главной страницы):


Теперь поподробнее об этом коде. В первой строчке есть несколько параметров, которые определяют списко постов:

С пятой по 32 строчку идет код, отвечающий за вывод последних комментариев из каждого поста. В нем есть несколько параметров:

Манипулируя вышеприведенными параметрами, а так же создав с помощью CSS оформление, вы можете получить красивый вывод последних прокомментированных постов, дополнив каждый из постов выводом последних комментариев из него.

Автор tiaurus 2181 статья
Автор n-wp.ru — блога о WordPress для новичков.

3 комментария

  1. Добрый день. Все скопировала. Работает, но выводит помимо постов с комментами просто последние посты. Как их убрать?

  2. Вопрос снимаю, не существенно, когда колличество комментов в общем на сайте станет 5, тогда соответственно и не будет вывод пустых постов, у меня просто мало комментов было. Спасибо

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*