Если у вас есть какие-то проблемы с AnyComment, эта статья именно для вас.
В ней, я постараюсь подробно расписать как и что вы можете сделать, чтобы понять источник проблемы и устранить её.
Ошибка «Упс, что-то пошло не так»
Это очень частная проблема после установки плагина.
Происходит она, как правило, из-за чего-то перечисленного ниже:
- в functions.php есть хуки на отключающие WP REST API
- конфликт плагинов связанных с оптимизацией, безопасностью и/или кешированием
- в .htaccess стоит редирект с /wp-json/ на главную сайта
Объяснение каждого из пунктов будет в таком же порядке.
Хуки в functions.php
Зачастую, веб-разработчики добавляют хуки в functions.php на отключение WP REST API.
Я не буду углубляться в технические термины, опишу REST API самым простым образом.
REST API — это отдельная страница вашего сайта (например, https://вашсайт.ru/wp-json/), куда разработчики могут обращаться, чтобы выполнять определенные действия. Например, если вы используете AnyComment, то при загрузке страницы записи, плагин делает запрос на /wp-json/anycomment/v1/comments чтобы получить n-нное количество комментариев для отображения.
Хуки в functions.php могут выглядеть следующим образом:
// Отключаем сам REST API add_filter('rest_enabled', '__return_false'); // Отключаем фильтры REST API remove_action( 'xmlrpc_rsd_apis', 'rest_output_rsd' ); remove_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 ); remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 ); remove_action( 'auth_cookie_malformed', 'rest_cookie_collect_status' ); remove_action( 'auth_cookie_expired', 'rest_cookie_collect_status' ); remove_action( 'auth_cookie_bad_username', 'rest_cookie_collect_status' ); remove_action( 'auth_cookie_bad_hash', 'rest_cookie_collect_status' ); remove_action( 'auth_cookie_valid', 'rest_cookie_collect_status' ); remove_filter( 'rest_authentication_errors', 'rest_cookie_check_errors', 100 ); // Отключаем события REST API remove_action( 'init', 'rest_api_init' ); remove_action( 'rest_api_init', 'rest_api_default_filters', 10, 1 ); remove_action( 'parse_request', 'rest_api_loaded' ); // Отключаем Embeds связанные с REST API remove_action( 'rest_api_init', 'wp_oembed_register_route' ); remove_filter( 'rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4 );
Скрипты могут различаться, это лишь пример полученный от одного из пользователей AnyComment, но суть одна — они отключают REST API.
Почти у каждого пятого человека, который обращается за помощью, имеет проблему именно с хуками в functions.php.
Чтобы понять есть у вас проблемы или нет:
- откройте functions.php в вашей теме
- в поиске файла напиши «rest» и нажмите поиск
- если нет никаких совпадений, можно выдохнуть и пропустить
- если есть, то вы можете сделать:
- Закомментаровать эти строки (используйте «//» для этого). Внимание! Делайте это только в том случае, если вы понимаете, что делаете.
- Если вы не понимаете, что делаете, обратитесь к разработчику плагина через любой контакт во вкладке «Помощь» (лучше всего Телеграм группа)
Настройки постоянных ссылок
Для корректной работы REST API нужно чтобы была выбрана опция «Название записи» в «Настройки» → «Постоянные ссылки».
Без это опции, REST API будет доступно по следующей ссылке: /?rest_route=/
, а если поставить настройку выше, формат поменяется на /wp-json/.
Будьте внимательны при смене формата ссылок, так как могут упасть SEO показатели.
Допустим, если у вас был anycomment.io/post.html, а сделали anycomment.io/post/, то .html страницы будут перенаправлять на новый адрес или вовсе выдадут 404.
В избежании подобных проблем, вы можете сделать редирект на уровне Apache или Nginx.
Вот как это сделать для Apache:
RewriteRule ^wp-json/(.*) /?rest_route=/$1 [L]
Добавьте это после области где написаны следующие строки:
RewriteEngine On RewriteBase /
Далее откройте ваш сайт, у вас должно показывается похожее, что есть тут.
Плагины оптимизации, безопасности, кеширования
Если вы используете плагины кеширования советую внести файл:
/wp-content/plugins/anycomment/static/js/main.min.js
В список исключений. Файл main.min.js — это сердце плагина.
Сделать это стоит по двум причинам:
- Если после обновления плагин кеширования провалится обновить его, то вы не увидите нововведений
- Подобные плагины так же любят объеденять все скрипты/стили в один файл, далее минифицировать его и уже выводить как один. Часто у них это не получается из-за багов в обработчике. Тем самым если в какой-то момент в файле происходит ошибка, то валится вся остальная логика которая идет после.
Кроме этого я советую сделать следующие настройки:
- Поставить кеширование данных не больше 8 часов
- Убрать кеширование для авторизованных пользователей (это рекомендуется сделать в любом случае)
- Убрать галочку с добавлением 304 ошибки (не во всех плагинах есть). Часто люди обращаются с такой проблемой от Clearfy
- Проверить не стоит ли какая-то настройка по отключению WP REST API (очень часто проблемы происходят именно из-за этого)
.htaccess и /wp-json/
Если ваш сайт работает на Apache и если вы не уверены в этом, то вероятнее всего это так.
- Зайдите в корень вашего проекта, где есть папки wp-content и т.д. и найдите файл .htaccess
- Откройте его с помощью текстового редактора
- Откройте поиск, введите «wp-json» и начните поиск
- Если ничего не найдено — значить тут все хорошо, а если что-то есть, например подобное: RedirectMatch 301/wp-json https://вашсайт.ru
- То закоментируйте строчку добавив
#
в начале строки или удалите целую строчку, так как вероятнее всего именно она не дает комментариям грузиться - Сохранить файл и попробуйте зайти на https://вашсайт.ru/wp-json/, редиректа быть не должно. Пример /wp-json/ можно посмотреть тут
Не отображаются комментарии
В некоторых случаях могут не отображаться комментарии. Ниже будут описаны возможные проблемы.
- если вы разработчик и создаете новую тему, тогда обратите внимание на функции wp_footer() и wp_head(), которые должны присутствовать в шаблона для вывода динамичного содержимого. Если у вас их нет, то плагины (включая AnyComment) могут отображаться некорректно.
- если вы НЕ разработчик, тогда стоит обратиться к разработчику, которые поможет вам проверить наличие фукнций wp_footer() и wp_head() в шаблоне темы
Это может происходить из-за плагина кеширования. Попробуйте очистить кеш, если после этого работает, то проблема в нем.
Проблема заключается в том, что плагин кеширует страницу, вместе с nonce. Nonce — это уникальный идентификатор от WordPress, которые помогает делать запросы на сайте более безопасными. Время его жизни не более 24ч и если кеш живет больше, то появляется подобная ошибка.
Для исправления ошибки:
- зайдите в настройки плагина кеширования
- найдите опцию для сброса кеша по определенному времени
- установите сброс кеша всех страниц каждый день в 00:01
Таким образом каждый 24 часа, nonce страниц будет автоматически обновляться.
«Извини, но комментарии закрыты.»
Эта ошибка указывает на то, что комментарии для записи или страницы закрыты. В таком случае форма отображаться будет, но оставить комментарий нельзя.
По умолчанию, в WordPress есть опцию по закрытию комментариев для всех записей или страниц или для определенной.
Для записей
- Зайдите в «Записи» — «Все записи»
- В поиске напишите название записи
- Наведите на найденную запись, нажмите на «Свойства»
- Далее поставьте галочку на «Разрешить комментарии»
Для страниц
- Зайдите в «Страницы» — «Все страницы»
- В поиске напишите название страницы
- Наведите на найденную страницу, нажмите на «Свойства»
- Далее поставьте галочку на «Разрешить комментарии»
Для всего сайта
- Зайдите в «Настройки» — «Обсуждение»
- Поставьте галочку на «Разрешить оставлять комментарии к новым записям»
- Сохраните настройки
Плагины
Закрывать комментарии можно также с помощью плагином, например, Clearfy.
Поэтому попробуйте деактивировать разные плагины оптимизаторы. Если проблема пропала, тогда стоит найти опцию связанную и отключить ее, чтобы не мешала работе комментариев.
Если такой опции нет, тогда стоит отказаться от плагина в целом.