Обратная сортировка комментариев wordpress

Возникла задача, вывести комментарии на сайте с wordpress так, что бы использовать постраничную навигацию и отображать вначале сверху ранние, а уже потом все остальные, сортируя комментарии по дате. В начале должны быть новые и начинаться все должно с 1 страницы.

Получилась интересная вещь. Постраничная навигация комментариев и встроенная возможность отображения последних комментов работали, но отображалась не первая, а последняя страница.

Постраничную навигацию я делал без плагинов, встроенной в wp функцией:

Добавляем в файл функций вашей темы такое:

function wp_comments_corenavi() {  
  $pages = '';  
  $max = get_comment_pages_count();  
  $page = get_query_var('cpage');  
  if (!$page) $page = 1;  
  $a['current'] = $page;  
  $a['echo'] = false;  
  $total = 1; //1 - выводить текст "Страница N из N", 0 - не выводить  
  $a['mid_size'] = 10; //сколько ссылок показывать слева и справа от текущей  
  $a['end_size'] = 10; //сколько ссылок показывать в начале и в конце  
  $a['prev_text'] = '«'; //текст ссылки "Предыдущая страница"  
  $a['next_text'] = '»'; //текст ссылки "Следующая страница"  
  if ($max > 1) echo '<div class="commentNavigation">';  
  if ($total == 1 && $max > 1) $pages = '<span class="pages">Страница отзывов ' . $page . ' из ' . $max . '.</span>'."
";  
  echo $pages . paginate_comments_links($a);  
  if ($max > 1) echo '</div>';  
}

Ну и вызывается функция в файле comments.php Вашего шаблона.

<?php if(function_exists('wp_comments_corenavi')) wp_comments_corenavi(); ?>

Чтобы сортировка была обратной (поверьте сделать это плагинами не получиться). Нужно добавить в SQL запрос ключевое слово DESC (убывающий). В папке wp-includes ищем файл comment-template.php. В файле ищем запрос на получение из базы комментариев. У меня он выглядит так:

$comments=$wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND (comment_approved = '1' OR ( user_id = %d AND comment_approved = '0' ) )  ORDER BY comment_date_gmt", $post->ID,$user_ID));
	} else if ( empty($comment_author) ) {
		$comments = get_comments( array('post_id' => $post->ID, 'status' => 'approve', 'order' => 'ASC') );

Добавляем ключ обратной сортировки.

$comments=$wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND (comment_approved = '1' OR ( user_id = %d AND comment_approved = '0' ) )  ORDER BY comment_date_gmt DESC", $post->ID,$user_ID));
	} else if ( empty($comment_author) ) {
		$comments = get_comments( array('post_id' => $post->ID, 'status' => 'approve', 'order' => 'DESC') );

Таким образом мы будем получать отсортированные комментарии по дате убывания. Осталось только включить в настройках обсуждения:

Сортировка

Пишу так как сам нигде не нашел как это сделать.

Полезное

Я читаю

  • devaka.ru
  • megaindex.org
  • seoprofy.ua
  • webmasters.ru
  • тИЦ fakir.name
  • подписка