Тюнинг виджета «Свежие комментарии»

Внимание! Эта заметка не решает поставленную задачу.

Спустя неделю после запуска этого решения было обнаружено непонятное поведение, а именно — в административном интерфейсе WordPress перестали отображаться комментарии. Мысленно я понимаю, где нужно исправить, но решения пока не нашёл. Поэтому для решения задачи, рассматриваемой в этой заметке, рекомендую использовать виджет Better WordPress Recent Comments.

Решил сделать для себя памятку, чтобы в будущем не забыть об этом решении.

Обслуживаю одну московскую фирму, занимающуюся остеклением балконов и лоджий в Москве. До этого их сайт был на Joomla, но как это обычно бывает, чтобы он нормально работал — нужен отдельный специалист. С WP всё гораздо проще, один раз освоившись во внутренностях админки, после этого самостоятельно решаешь все вопросы.

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

Но возник нюанс — для страницы «Отзывы» мы использовали обычные комментарии из WordPress, оно и понятно — отзывы это и есть комментарии. Спустя несколько месяцев у клиента возникло желание открыть комментарии и к другим страницам, чтобы улучшить поведенческие. Вопросы и комментарии на страницах однозначно положительно влияют на развитие сайта.

Только возникла незадача — стандартный виджет «Свежие комментарии» выводит абсолютно все комментарии в сайдбаре, но нам нужны были только со страницы «Отзывы», иначе смысл от этого виджета пропадает. Искать какие-то изощрённые плагины не хотелось, оно и понятно — чем больше плагинов, тем хуже работает движок сайта.

Поэтому был обнаружен отличный способ вырезать все ненужные комментарии из виджета в автоматическом режиме, путём создания фильтра через functions.php. Делаем?

Тюнинг виджета "Свежие комментарии"

Удаляем лишние комментарии

Первым делом нам нужно понять, по какому условию будем удалять комментарии.

Это может быть желание исключить комментарии администратора сайта, либо каких-то конкретных людей. Но в моём случае нужно было в виджете выводить только комментарии с конкретной страницы.

Поэтому сначала нам нужно найти ID этой самой страницы.

Заходим в редактирование страницы, на которой выводятся отзывы и смотрим в адресную строку. Нас интересует значение параметра «post»:
Тюнинг виджета "Свежие комментарии"

Запоминаем его и идём дальше.

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

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

В общем, нас интересует таблица wp_comments, именно в ней хранятся все комментарии:
Тюнинг виджета "Свежие комментарии"

Открываем её в режиме «Структура» и посмотрим, что у нас имеется:
Тюнинг виджета "Свежие комментарии"

Видим перед глазами структуру таблицы wp_comments:
Тюнинг виджета "Свежие комментарии"

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

В моём случае мне нужно оставить в виджете только комментарии определённой страницы, за это отвечает поле comment_post_ID:
Тюнинг виджета "Свежие комментарии"

Если вы захотите исключить комментарии конкретного автора, то понадобится поле comment_author, если с конкретного email-адреса, то поле comment_author_email, в таком духе. Я думаю вы уже уловили логику.

Так вот, раз мы нашли и определились с нужным нам полем, пришло самое время написать небольшой код в functions.php и настроить вывод комментариев в нашем виджете.

Для этого подключаемся к FTP вашего хостинга, заходим в директорию с темой и находим файл functions.php, открываем его на редактирование любым удобным текстовым редактором. Я рекомендую использовать Notepad++, либо Sublime Text 2.

Прокручиваем в самый низ этого файла и добавляем следующий код:

/* Удаляем лишние комментарии из виджета */
add_action( 'widgets_init', 'custom_recent_comments' );
function custom_recent_comments(){
    add_filter( 'comments_clauses', 'custom_comments_clauses' );
}

function custom_comments_clauses( $clauses ){
    $clauses['where'] .= " AND comment_post_ID = 11 ";
    return $clauses;
}

Обратите внимание на вот эту строчку:

$clauses['where'] .= " AND comment_post_ID = 11 ";

Именно здесь мы указываем по какому полю будет происходит фильтрация. Т.к. мне необходимо показывать в виджете только комментарии со страницы с ID = 11, то я использую именно эту конструкцию в запросе.

Если вы захотите спрятать все комментарии администратора, то эта строчка примет следующий вид:

$clauses['where'] .= " AND comment_author = 1 ";

Почему? Всё просто — поле comment_author содержит код зарегистрированного пользователя в WordPress, а администратор чаще всего имеет код под номером 1, поэтому выражение принимает именно такой вид.

Если же вам нужно удалить комментарии только с определённой страницы, тогда вам сначала придётся выяснить её ID, как в первом шаге этой инструкции, а затем переписать код на следующий:

$clauses['where'] .= " AND comment_post_ID <> 11 ";

Либо для нескольких страниц:

$clauses['where'] .= " AND comment_post_ID NOT IN (1, 2, 3) ";

Где 1, 2 и 3 — ID страниц, комментарии которых выводить не нужно.

Теперь вам останется сохранить этот файл и загрузить его обратно на FTP. Всё!

Проверяем

Тюнинг виджета "Свежие комментарии"

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Комментарии

  • Спасибо, хорошая статья. Вот только убрать по id легко. Это делают и плагины без знания кода можно разобраться. А вот подскажи лучше как вывести последние комментарии только одного автора? В отдельном виджете, не нарушая всей структуры остальных комментариев?

  • Хорошо бы после «Быстро приехал, всё объяс» поставить троеточие.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: