Гайды

Отладка AnyComment. Частые проблемы пользователей.

Автор 3 ноября, 2018 96 комментариев

Если у вас есть какие-то проблемы с 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» и нажмите поиск
  • если нет никаких совпадений, можно выдохнуть и пропустить
  • если есть, то вы можете сделать:
  1. Закомментаровать эти строки (используйте «//» для этого). Внимание! Делайте это только в том случае, если вы понимаете, что делаете.
  2. Если вы не понимаете, что делаете, обратитесь к разработчику плагина через любой контакт во вкладке «Помощь» (лучше всего Телеграм группа)

Настройки постоянных ссылок

Для корректной работы 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()

  • если вы разработчик и создаете новую тему, тогда обратите внимание на функции wp_footer() и wp_head(), которые должны присутствовать в шаблона для вывода динамичного содержимого. Если у вас их нет, то плагины (включая AnyComment) могут отображаться некорректно.
  • если вы НЕ разработчик, тогда стоит обратиться к разработчику, которые поможет вам проверить наличие фукнций wp_footer() и wp_head() в шаблоне темы

«Неверный параметр nonce в cookie»

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

Проблема заключается в том, что плагин кеширует страницу, вместе с nonce. Nonce —  это уникальный идентификатор от WordPress, которые помогает делать запросы на сайте более безопасными. Время его жизни не более 24ч и если кеш живет больше, то появляется подобная ошибка.

Для исправления ошибки:

  • зайдите в настройки плагина кеширования
  • найдите опцию для сброса кеша по определенному времени
  • установите сброс кеша всех страниц каждый день в 00:01

Таким образом каждый 24 часа, nonce страниц будет автоматически обновляться.

«Извини, но комментарии закрыты.»

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

По умолчанию, в WordPress есть опцию по закрытию комментариев для всех записей или страниц или для определенной.

Для записей

  • Зайдите в «Записи» — «Все записи»
  • В поиске напишите название записи
  • Наведите на найденную запись, нажмите на «Свойства»
  • Далее поставьте галочку на «Разрешить комментарии»

Для страниц

  • Зайдите в «Страницы» — «Все страницы»
  • В поиске напишите название страницы
  • Наведите на найденную страницу, нажмите на «Свойства»
  • Далее поставьте галочку на «Разрешить комментарии»

Для всего сайта

  • Зайдите в «Настройки» — «Обсуждение»
  • Поставьте галочку на «Разрешить оставлять комментарии к новым записям» 
  • Сохраните настройки

Плагины

Закрывать комментарии можно также с помощью плагином, например, Clearfy.

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

Если такой опции нет, тогда стоит отказаться от плагина в целом.