14 июня 2017

Свежая версия Contact Form 7 не работает с выключенным REST API

Вот, узнал свеженькую новость (читайте заголовок). Радуюсь 🙂 Зачем-то Contact Form 7 начиная с версии 4.8 решил работать через REST API. Проблема в том, что я отключал REST API, т.к. не видел в нем смысла. Нужен он для взаимодействия сайта со сторонними приложениями (какими-нибудь программами для мобильных устройств, например) и, в моем понимании, все это было лишним.

Ладно бы, если REST API просто работал тихонечко, так нет — в head появлялись ссылки вида http://site.ru/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fmiminapifet.ru%2Fkontaktnaya-forma и по ним начинал гулять поисковик. Ну я психанул и выпилил его.

Я отключал REST API добавляя в 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 );
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'wp_oembed_add_host_js' );

При попытке отправить сообщение формой плагина Contact Form 7 с отключенным REST API, иконка ожидания отправки крутилась и ничего не происходило.

Что же делать, чтобы Contact Form 7 снова заработала

Оставаться на старой версии плагина вообще не вариант, как по мне. Все старое постепенно обрастает дырами да и не спроста же они решили внедрить REST API (я надеюсь).

  • Убрать код отключения REST API из functions.php. Но этого мало 🙂 См. следующий пункт.
  • Нужно переключить в админке Настройки → Постоянные ссылки в положение «Простые», сохранить изменения, вернуть настройку в предыдущее (нормальное) состояние и снова сохранить изменения. Т.е. дернуть настройки постоянных ссылок туда-сюда. Без этого не заработает. Это передергиваение, на сколько мне удалось проанализировать, ни к каким проблемам не приведет.
  • Естественно, в head появятся те самые мерзкие ссылки, из-за которых я психанул. Но ничего страшного, мы их закроем в robots.txt. Директива Disallow: */wp-json/*.

Robots.txt, который я считаю на данный момент оптимальным, можно скачать здесь.

P.S. Есть такой плагин, Clearfy. Так вот он тоже отключает Rest API.

Clearfy и Rest API

P.P.S. Возник вопрос: потеряются ли ярлыки, которые пользователь сам вводил для записей и рубрик после переключения настроек ЧПУ туда-обратно. Я протестировал, хорошая новость — ярлыки сохраняются, проблемы нет.

Плюсануть
Поделиться
Отправить
Класснуть
Линкануть
Запинить