Гайды

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

By Ноябрь 3, 2018 12 комментариев

Если у вас есть какие-то проблемы с 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 );

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

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

Чтобы понять есть у вас проблемы или нет:

  • откройте functions.php в вашей теме
  • в поиске файла напиши «rest» и нажмите поиск
  • если нет никаких совпадений, можно выдохнуть и пропустить
  • если есть, то вы можете сделать:
  1. удалить эти строки (делайте это только в том случае, если вы понимаете, что делаете)
  2. если вы не понимаете, что делаете, обратитесь к разработчику плагина через любой контакт во вкладке «Помощь» (лучше всего Телеграм группа)

Плагины: оптимизаторы, безопасность,  кеширование

Если вы используете плагины кеширования советую внести файл:

/wp-content/plugins/anycomment/static/js/main.min.js

В список исключений. Файл main.min.js — это сердце плагина.

Сделать это стоит по двум причинам:

  • Если после обновления плагин кеширования провалится обновить его, то вы не увидите нововведений
  • Подобные плагины так же любят объеденять все скрипты/стили в один файл, далее минифицировать его и уже выводить как один. Часто у них это не получается из-за багов в обработчике. Тем самым если в какой-то момент в файле происходит ошибка, то валится вся остальная логика которая идет после.

.htaccess и /wp-json/

Если ваш сайт работает на Apache и если вы не уверены в этом, то вероятнее всего это так.

  • Зайдите в корень вашего проекта, где есть папки wp-content и т.д. и найдите файл .htaccess
  • Откройте его с помощью текстового редактора
  • Откройте поиск, введите «wp-json» и начните поск
  • Если ничего не найдено — значить тут все хорошо, а если что-то есть, например подобное:
    RedirectMatch 301/wp-json https://вашсайт.ru
  • То закоментируйте строчку добавив # в начале строки или удалите целую строчку, так как вероятнее всего именно она не дает комментариям грузиться
  • Сохранить файл и попробуйте зайти на https://вашсайт.ru/wp-json/, редиректа быть не должно. Пример /wp-json/ можно посмотреть тут