Как включить комментарии на странице WordPress
Как я уже писал в инструкции Как активировать дополнительные свойства для меню, в каждом разделе WordPress имеются скрытые настройки, которые позволяют вам добавить дополнительные элементы. Страницы в этом случае прямое тому подтверждение.
Бывают случаи, когда вам необходимо добавить комментирование на все или некоторых страницах. Например, у вас есть описание какого-то товара или же это может быть страница обратной связи, некоторым может быть неудобно писать вам письма, поэтому давайте дадим людям возможность задавать свои вопросы прямо с интересующей их страницы!
Заходим в раздел «Настройки экрана» в правом верхнем углу интерфейса создания или редактирования страницы.

Находим две настройки «Обсуждение» и «Комментарии», а затем ставим «флажок» возле них, чтобы эти скрытые опции появились на экране.

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

После этих простых манипуляций на текущей странице вашего сайта появится форма комментирования, которая даст возможность вашим пользователям задавать свои вопросы прямо на странице, не прибегая к форме обратной связи!
Видеоинструкция
Записал ещё и короткое видео по активации комментариев. Кому удобнее смотреть в таком формате — рекомендую подписаться на мой канал на YouTube, чтобы не пропустить выпуск новых материалов!
Автор
Александр Кадыров
Занимаюсь разработкой сайтов на WordPress около 10 лет, с тех же пор стал вести блог о WordPress. В итоге это всё вылилось в этот курс, где вы сейчас находитесь. В свободное время программирую на Ruby, PHP и Golang, увлекаюсь администрированием серверов и автоматизацией своей деятельности. Посмотреть все записи автора Александр Кадыров
Как включить комментарии на странице WordPress: 14 комментариев
Робби Иванов :
Как включить комментарии о новом версии wordpress?
В интерфейсе создания/редактирования страницы в правой части экрана блочного редактора есть компонент «Обсуждения» и там доступна галочка «Включить комментарии».
очень полезная информация, спасибо
Опцию «Разрешить комментарии» активировала, т.е. галочку поставила, а комментариев на странице так и нет. Может подскажете, в чем еще может быть проблема? Сам комментарии нормально функционируют в записях.
Добрый день, Ирина! Можете скинуть ссылку на эту страницу?
Можете предоставить доступ к Консоли WordPress? Например, отправить мне на alexander@kadyrov.dev, я зайду и посмотрю, в чём может быть дело.
Спасибо Александр! Вы мне хорошо помогли. У меня почему-то вдруг пропала строка комментарие в двух последних темах. Согласно вашему уроку довольно быстро всё восстановил и запомнил. Но есть вопрос — это делается для каждой будущей записи один раз или нужно следить за состоянием страницы. Я что -то не обращал внимания и вот столкнулся с двумя случаями отсутствия строки комментарий.
Рустем :
Спасибо, реально помогли!
ascasc :
Спасибо Александр! Вы мне хорошо помогли. У меня почему-то вдруг пропала строка комментарие в двух последних темах. Согласно вашему уроку довольно быстро всё восстановил и запомнил. Но есть вопрос — это делается для каждой будущей записи один раз или нужно следить за состоянием страницы. Я что -то не обращал внимания и вот столкнулся с двумя случаями отсутствия строки комментарий.
Благодарю за статью и видео!
Но у меня всё равно не получается. И в настройках во вкладке обсуждения галочки стоят и в настройках экрана для отдельной страницы, на которой мне нужно, чтобы отображались коментарии, поставила галочки напротив обсуждение и комментирование. Всё равно, почему то не отображается блок комментирования.
В чём ещё может быть дело, может быть подскажите?
Добрый день, Юлия! Если можете, скиньте мне на alexander@wordpress1.ru письмо с логином и паролем для входа в админку вашего сайта, я посмотрю, в чём может быть проблема.
Настройка комментариев в WordPress
В этой статье мы поговорим о важной теме для каждого блоггера, а именно настройка комментариев. Ведь что такое комментарий, это неотъемлемая составляющая для хорошо написанной и востребованной статьи. Если читатель оставляет свой комментарий это значит что он прочел статью, он выражает свои мысли и идеи, может быть даже замечания, но это человек, который проявил интерес и внес живость в ваш блог или к определенной заметке, статье.
Но иногда возникает различные обстоятельства или ситуации, когда администратору или владельцу блога нужно настроить комментарии, в зависимости от своих нужд. Сегодня, мы поговорим, как правильно настроить комментарии на СMS WordPress.
Для этого, перейдите в админ панель и выберите Настройки/ Обсуждение. Именно в этом разделе, администратор сможет управлять комментариями на блоге. Весь раздел поделен на отдельные блоки, где идут настройки для статьи по молчанию или другие настройки комментариев, настройка аватаров, прочее.
У вас есть возможность настроить коментарии для зарегистрированных пользователей. Или же наоборот, убрать пометку чтобы пользователь вносил свой e-mail и имя перед написанием комментария.
Отметим, что комментарий пользователя который он написал, публикуется не сразу, а лишь после одобрения администратором. Если комментарий от пользователя был одобрен один раз, по умолчанию стоят настройки, что не требуют одобрения для этого пользвателя в следующих комментариях. Если же вы хотите чтобы все коментарии были одобрены администратором, нужно убрать отметку с нижней строчки и перемеcтить на верхнюю, в блоке «Перед появлением комментария», как указано на изображении.

Для того, чтобы запретить какому то пользователю вносить комментарии, его можно внести в «Черный список».
После внесения всех изменений не забудьте нажать кнопку «Сохранить» внизу страницы.
Напоминаем, что после того, как пользователь впервые оставляет комментарий на блоге, администратор может отредактировать или сразу же одобрить его. Во-первых, все комментарии отображаются в разделе Комментарии в админ панели, и выглядят примерно так. Те которые ожидают модерации, отображаться с желтым фоном. Администратор может выполнить с любым из комментариев ряд функции: одобрить и ответить или удалить или пометить, как спам и даже отредактировать.

В любом случае на этом все манипуляции з настройкой комментариев завершены.
Комментарии в WordPress
Комментарии это отдельная сущность в структуре данных WordPress. Связывают комментарии с записями (постами, таблица wp_posts ) и пользователями (таблица wp_users ).
- Как устроены Таксономии в WordPress
- Как устроены Записи в WordPress
- WP REST Маршрут «Комментарии (comments)»
- Нумерация комментариев в WordPress
- Функция для вывода последних комментариев
Оглавление:
- Структура таблиц комментариев в БД
- wp_comments
- wp_commentmeta
- Вывод комментариев в теме
- Установка куков комментирования для неавторизованных пользователей
- Функции комментариев
Структура таблиц комментариев в БД
В базе данных WordPress за комментарии отвечают две таблицы: wp_comments и wp_commentmeta . Разберем каждую.

wp_comments
Содержит основные данные комментария.

| Поле | Описание и пример значения |
|---|---|
| comment_ID | ID комментария. (7999) |
| comment_post_ID | ID записи к которой относится комментарий. Равно колонке ID в таблице wp_posts (4896) |
| comment_author | Имя автора комментария. (Mseo) |
| comment_author_email | email автора комментария. (maoru@yandex.ru) |
| comment_author_url | URL автора комментария. ( http://maeo.ru ) |
| comment_author_IP | IP автора комментария. Автоматически НЕ определяется. (95.79.52.2) |
| comment_approved | Одобрен коммент или нет: 1/0. Это строковое поле и него плагины могут записывать и другие значения, например, ‘spam’. Правильнее было бы назвать это поле comment_status , но оно используется в таблице wp_posts . |
| comment_agent | User agent автора комментария. (Mozilla/5.0 (Windows. ) |
| comment_date | Дата и время отправки комментария. В MySQL формате. (2015-09-01 16:28:33) |
| comment_date_gmt | Дата и время отправки комментария в GMT зоне. (2015-09-01 16:28:33) |
| comment_content | Текст комментария. (Приветствую, выше указанный. ) |
| comment_karma | Карма комментария. (0) |
| comment_type | Тип комментария. По умолчанию ВП используются три типа: comment — обычный коммент (до версии 5.0 был пустой строкой » ). trackback и pingback . О них читайте здесь. |
| comment_parent | ID родительского комментария. (7998) |
| user_id | ID пользователя, который опубликовал комментарий. Равно колонке ID в таблице wp_users (123) |
ВАЖНО! Длинна значение поля comment_type = 20 символов! Пример максимально допустимой длины: new_question_comment .
Пример того, как такое ограничение может испортить код: допустим у нас есть дополнительный типа комментария question_comment . Некоторые из таких комментариев со временем попадают в архив, при этом нам нужно добавить префикс archive- к типу. Делаем мы это так:
// $com - это объект обрабатываемого комментария wp_update_comment( [ 'comment_ID' => $com->comment_ID, 'comment_type' => "archive-$com->comment_type", // archive-question_comment ] );
В результате такое обновление не сработает и что важнее мы не увидим никакой ошибки — ничего! Чтобы понять почему не обновляется придется лезть в дебри ядра ВП.
wp_commentmeta
Содержит дополнительные данные комментария. Из коробки в эту таблицу ничего не записывается, она нужна для расширения функционала комментирования, чтобы добавить комментариям дополнительные данные.

Вывод комментариев в теме
Для вывода комментариев на странице нужно использовать функцию comments_template() в том месте, где нам нужно показать список комментариев. Эта функция сделает запрос и соберет комментарии для страницы.
Также в тему нужно добавить файл comments.php . В нём нужно описать вывод комментариев:
- Нужно проверить есть ли комментарии на странице. Делается это с помощью переменной $comemnts , которая устанавливается в comments_template() — $comments = & $wp_query->comments и доступна в этом файле. Также проверить наличие комментариев на странице можно функцией have_comments(). Далее если:
- комментарии есть, нужно использовать функцию wp_list_comments() чтобы вывести список комментариев.
- комментариев нет, нужно вывести сообщение что их нет.
Пример файла comments.php из темы Twenty Twenty:
if ( $comments ) < ?>
elseif ( 1 === $comments_number ) < /* translators: %s: Post title. */ printf( _x( 'One reply on “%s”', 'comments title', 'twentytwenty' ), get_the_title() ); >else < printf( /* translators: 1: Number of comments, 2: Post title. */ _nx( '%1$s reply on “%2$s”', '%1$s replies on “%2$s”', $comments_number, 'comments title', 'twentytwenty' ), number_format_i18n( $comments_number ), get_the_title() ); >?>
new TwentyTwenty_Walker_Comment(), ‘avatar_size’ => 120, ‘style’ => ‘div’, ) ); $comment_pagination = paginate_comments_links( array( ‘echo’ => false, ‘end_size’ => 0, ‘mid_size’ => 0, ‘next_text’ => __( ‘Newer Comments’, ‘twentytwenty’ ) . ‘ ‘, ‘prev_text’ => ‘ ‘ . __( ‘Older Comments’, ‘twentytwenty’ ), ) ); if ( $comment_pagination ) < $pagination_classes = ''; // If we're only showing the "Next" link, add a class indicating so. if ( false === strpos( $comment_pagination, 'prev page-numbers' ) ) < $pagination_classes = ' only-next'; >?> «> ?>if ( comments_open() || pings_open() ) < if ( $comments ) < echo '
‘; > comment_form( array( ‘class_form’ => ‘section-inner thin max-percentage’, ‘title_reply_before’ => ‘‘, ‘title_reply_after’ => ‘
‘, ) ); > elseif ( is_single() ) < if ( $comments ) < echo '
‘; > ?>Установка куков комментирования для неавторизованных пользователей
Когда неавторизованный пользователь оставляет комментарий, WP устанавливает куки в которых сохраняются введенные данные. Какие куки сохраняются:
'comment_author_' . COOKIEHASH 'comment_author_email_' . COOKIEHASH 'comment_author_url_' . COOKIEHASH // где COOKIEHASH = md5( get_site_option( 'siteurl' ) )
add_action( 'set_comment_cookies', 'wp_set_comment_cookies', 10, 3 );
Этот хук срабатывает когда комментарий публикуется через форму комментирвоания comment_form(). Т.е. когда отправляется POST запрос в файл /wp-comments-post.php:
/** * Perform other actions when comment cookies are set. * * @since 3.4.0 * @since 4.9.6 The `$cookies_consent` parameter was added. * * @param WP_Comment $comment Comment object. * @param WP_User $user Comment author's user object. The user may not exist. * @param bool $cookies_consent Comment author's consent to store cookies. */ do_action( 'set_comment_cookies', $comment, $user, $cookies_consent );
Используйте wp_get_current_commenter(), чтобы получить данные этих cookies.
Для работы этой функции нужно чтобы была включена опция show_comments_cookies_opt_in : «Обсуждения» → чекбокс «Показывать галочку разрешения установки куки для авторов комментариев«.
Когда эта опция включена, то в форме комментирования будет выведена галочка «», если галочка включена, то с запросом отправляется поле $_POST[‘wp-comment-cookies-consent’] , эта опция в последствии передается третий параметр функции wp_set_comment_cookies().
Функции комментариев
Это список часто используемых функций. Полный список смотрите здесь.
comments_template() Подгружает файл шаблона комментариев на странице записи: /comments.php из папки темы. wp_list_comments() Выводит комментарии записей (постов, страниц). Функция может принимать ряд параметров и используется в шаблоне для вывода списка комментариев к посту/странице. Некоторые из параметров можно настроить в админ-панели. comment_form() Выводит на экран готовый код формы комментирования. get_comments() Получает комментарии по указанным параметрам, в виде массива данных. get_comment() Получает данные указанного комментария из базы данных. Возвращает экземпляр класса WP_Comment (условно можно сказать что возвращаются все поля таблицы wp_comments ). get_comments_number() Получает количество всех комментариев поста, включая уведомления и пинги. wp_count_comments() Получает данные о количестве комментариев на сайте или отдельно для указанного поста. Данные собираются отдельно по типам комментов (все варианты поля comment_approved : approved , spam и т.д.). get_comment_date() Получает дату указанного комментария. get_avatar_url() Получает ссылку на аватар, по переданному email, ID или объекту пользователя. Также можно передать объект поста или комментария. comment_reply_link() Выводит ссылку , которая позволяет отвечать на комментарий. Тег используется в цикле комментариев, для каждого комментария. edit_comment_link() Выводит ссылку (HTML тег A) на редактирование текущего в цикле комментария, если у пользователя есть право на это. comment_link() Выводит ссылку (URL) комментария. paginate_comments_links() Выводит список ссылок на страницы комментариев (ссылки пагинации), текущего поста. wp_insert_comment() Вставляет/добавляет комментарий в базу данных. wp_new_comment() Добавляет новый комментарий в Базу Данных. Фильтрует данные. Публикация комментариев по таймеру в WordPress, отложенные комментарии – решение
В WordPress имеется превосходная система комментирования. Однако большинство пользователей лишь просматривают размещённый контент, а вот энтузиазма в комментировании не проявляют. Особенно «сражают» от отсутствия комментариев те материалы, в которых ранее вообще комментарии никем не оставлялись.
И порой в этой ситуации может помочь размещение лишь одного комментария, к примеру, с благодарностью, чтобы люди продолжили этот «тренд» и в целом начали активно обсуждать материал, делиться собственным мнением и так далее.
Однако WordPress является весьма гибким «движком». И в нём можно реализовать автоматическое размещение заранее написанных комментариев, которые будут появляться по мере наступления времени всё это гибко настраивается. И этот материал будет посвящён реализации данной возможности.
Размещение комментариев в автоматическом режиме с настройкой времени в ВордПресс
В реализации задуманного нам поможет небольшой код, который необходимо разместить в файле functions.php . Вот это код:
add_action( 'pre_get_comments', function ( $commentQuery ) < if (!is_admin()) < $commentQuery->query_vars[ 'date_query' ] = [ [ 'before' => current_time( 'mysql' ), ], ]; >> ); add_filter('get_comments_number', 'comment_count_fix', 0); function comment_count_fix( $count ) < if ( ! is_admin() ) < global $id; $get_comments = get_comments('status=approve&post_id=' . $id); $comments_by_type = separate_comments($get_comments); return count($comments_by_type['comment']); >else < return $count; >>После размещения кода дело останется за малым. Зайдите в раздел с комментариями, откройте на редактирование любой ещё не опубликованный комментарий, отредактируйте в нём тест на своё усмотрение и выставите дату и время, когда он должен быть опубликован, установите статус «Одобрен» и нажмите кнопку Обновить.

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