Отключение плагинов при REST запросах в WordPress

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/

Михаил Кобзарёв

Суровый русский тимлид. Жил в Магадане, в офисе московских веб студий и в Тульской деревне. Виртуозно знает WordPress, PHP, ООП, Vue.js и вот это вот все. Делает крутые высоконагруженные сайты, поэтому уже почти захватил весь рынок WordPress разработки в России. Не дает никому делать сайты без спроса. Ведет блог о разработке, дайджест в телеграмме и в ВК. Любит сиськи, баню и радиоэлектронику. 100% патриот (но это не точно). Тролль 542 уровня. Ездит в отпуск раз в 5 лет.

Добавить комментарий

%d такие блоггеры, как: