Если вы хотите, чтобы в CMS WordPress комментарии к статье шли в обратном порядке (самые новые вверху) и при этом использовать пагинацию (разбиение на страницы, например, по 10 комментариев), то можете столкнуться с неприятностью, что данная сортировка работает только в том случае, если последние комментарии будут на самой последней странице (а не на первой, как нам этого хочется).
Описание проблемы
В случае использования пагинации комментариев (т.е. их разбиения на страницы), не получится сделать так, чтобы самые последние (новые) комментарии шли на первой странице, более старые на второй и т.д. Вордпресс позволяет сделать только так, чтобы самые последние комментарии шли на самой последней странице. Меня такой вид отображения напрягает и кажется совсем неудобным для информационных статей, где в самых новых комментариях содержится наиболее актуальная информация.
Решение
Чтобы это изменить, необходимо проделать следующее. Заходим в «Настройки» > «Обсуждение» и приводим настройки к такому виду, как на скриншоте ниже.
При таких настройках, при открытии статьи с комментариями, будет открываться первая страница и на ней выводится самые старые комментарии. Пол дела уже сделано, теперь нам необходимо поменять порядок отображения комментариев, чтобы вместо старых, выводились новые. Для этого в файл functions.php вашей темы оформления, необходимо внести следующие строки:
###############Меняем порядок комментариев###############
add_filter( 'comments_clauses' , 'reverse_comments');
function reverse_comments($clauses){
if ($clauses['limits']) {
$clauses['orderby'] = 'wp_comments.comment_date_gmt DESC, wp_comments.comment_ID DESC';
}
return $clauses;
}
###############Меняем порядок комментариев###############
Данный код — поменяет параметры в запросе к Mysql, который делает WordPress. Условие if ($clauses['limits'])
необходимо, чтобы менялся порядок сортировки только комментариев первого уровня (т.к. у нас в примере стоит разбиение по 10 комментариев на страницу), а все вложенные комментарии (второго, третьего и т.д. уровней) мы не трогаем, чтобы не нарушать порядок отображения.