Стратегии реализации выборочной загрузки плагинов

Я пытаюсь выяснить какой-то механизм загрузки плагинов по требованию, в зависимости от URL-адреса страницы, для повышения производительности.

Моя главная проблема заключается в том, что у меня есть некоторые вызовы admin-ajax.php, которые повторяются, пока пользователь активен на странице. Я пробовал профилировать эти вызовы и обнаружил, что большинство плагинов, загруженных для вызова ajax, не нужны.

Хотя я мог использовать is_admin() для идентификации ajax-звонка, я хочу оставить код WordPress и плагин неповрежденными. Кроме того, is_admin() не проводит различия между вызовом ajax и административной панелью.

Я изучал процедуру загрузки плагинов. Я видел только действия 'muplugins_loaded' , 'plugins_loaded' , никаких фильтров для загрузки в процесс загрузки. Я проверил wp_get_active_and_valid_plugins и, похоже, единственный способ изменить загрузку плагина – это update_option('active_plugins') явно, что не является жизнеспособным вариантом. Другие вещи жестко закодированы.

(Я хотел бы упомянуть, что этот плагин http://wordpress.org/extend/plugins/selective-loading/ использует метод update_option , который, на мой взгляд, подходит только в среде, отличной от ajax, или в противном случае изменение опции не будет атомарным.)

Мне интересно, есть ли способ реализовать выборочную загрузку плагинов?

Фильтр option_active_plugins . Здесь вы можете изменить результат get_option() без фактического изменения базы данных.

 if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) add_filter( 'option_active_plugins', 'disable_plugins_temporary' ); function disable_plugins_temporary( $plugins ) { // unset plugins you don't need, then return $plugins; } 

Задний план

wp_get_active_and_valid_plugins() вызывает get_option( 'active_plugins', array() ) для получения активных плагинов. В get_option( $option, $default = false ) мы находим этот фильтр:

 return apply_filters( 'option_' . $option, maybe_unserialize( $value ) ); 

Таким образом, полученное имя для нашего фильтра – option_active_plugins .

Я не уверен, что это поможет вам с вашим вызовом ajax, но Plugin Organizer – это хорошо поддерживаемый плагин, который позволяет выборочную загрузку других плагинов на основе URL. Он отлично работает на моем сайте.