Intereting Posts
Пользовательский тип сообщения / настраиваемые поля Заголовок страницы фильтра (отображается на вкладке браузера) wp-login Различные настройки для the_excerpt () Запрос пользователя и ошибка поиска Отправка электронной почты с помощью функции на странице или правильное действие на другой странице подключать пользователей к пользовательским типам сообщений Ограничить количество изображений для загрузки за сообщение jQuery в верхнем или нижнем колонтитуле WordPress автоматический логин после регистрации не работает Могу ли я изменить свой язык на английский? AJAX-вызов завершается с ошибкой при отправке JSON, но работает со строкой стиля URL Проверьте, является ли текущий пользователь автором первого комментария Добавить отображаемое изображение на боковой панели Как ограничить количество форм, которые пользователь может создать в гравитационных формах? Как получить текущий идентификатор страницы редактирования в администраторе?

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

Я пытаюсь выяснить какой-то механизм загрузки плагинов по требованию, в зависимости от 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. Он отлично работает на моем сайте.