WordPress REST API — это логичное продолжение любой взрослой CMS, которую можно использовать как фреймворк или как бэкенд для мобильного или десктоп приложения.
В данный момент REST API интегрирован в ядро WordPress с версии 4.7, эта технология стабильна, но имеет свои недостатки.
Например, «из коробки» пока нет функции для определения того, что текущий запрос идет по REST API. В WordPress 5 нам обещают добавить wp_is_json_request().
Другой недостаток — при REST запросах подгружается всё ядро WordPress и абсолютно все mu-плагины и обычные плагины, которые очень сильно тормозят ответ сервера на такие запросы.
Именно этот недостаток мы и попробуем исправить.
Кладём файл _mihdan-disable-plugins-for-rest-api.php
(подчёркивание нужно, чтобы файл загрузился первым) в папку mu-plugins
со следующим содержимым:
<?php /** * Plugin Name: Mihdan: Disable Plugins For REST API * Description: Отключить все плагины при запросах REST API для увеличения скорости ответов * Version: 1.0 * Author: Mikhail Kobzarev * Author URI: https://www.kobzarev.com/ */ if ( false !== strpos( $_SERVER['REQUEST_URI'], '/wp-json' ) ) { /** * Отключает плагины, оставляя нужные * * @param array $plugins список плагинов * * @return array */ function mihdan_disable_plugins_for_rest_api( $plugins ) { // Массив плагинов, которые нужно оставить $allowed = array( 'mihdan-cabinet/mihdan-cabinet.php', 'mihdan-loadmore/mihdan-loadmore.php', 'mihdan-statistics/mihdan-statistics.php', ); $plugins = array_intersect( $plugins, $allowed ); return $plugins; } add_filter( 'option_active_plugins', 'mihdan_disable_plugins_for_rest_api' ); } // eof;
На некоторых шаред-серверах прирост в скорости был почти 3 секунды в процессе тестирования.
Огромную благодарность в создании данного плагина хочется выразить Сергею Бирюкову, без которого код был бы в сотню раз сложнее. Сергей, спасибо от всего сообщества WordPress!
Источник: https://www.kobzarev.com/wordpress/disable-plugins-for-rest/