В каком порядке WordPress загружает файлы плагинов?


21

В каком порядке плагины загружаются в WordPress?

И в какой папке конкретного плагина, какой порядок следования для загрузки?


Вы можете очень глубоко отлаживать с помощью этого плагина: https://wordpress.org/plugins/whats-running/ В нем перечислены все необходимые файлы в WordPress.
— Сепе Виктор

Ответы:


26

Ответ на первый вопрос:

  1. В wp-settings.phpWordPress сначала проверяет наличие любых обязательных плагинов (плагинов в дополнительной mu-pluginsпапке) и загружает их.

  2. Затем, если вы используете многосайтовую установку, он проверяет плагины, которые активированы по сети, и загружает их.

  3. Затем он проверяет все остальные активные плагины, просматривая active_pluginsзаписи wp_optionsтаблицы базы данных, и просматривает их. Плагины будут перечислены в алфавитном порядке.

Вот порядок, в котором WordPress загружает практически все: http://codex.wordpress.org/Action_Reference#Actions_Run_During_a_Typical_Request

Дело в том, что обычно не имеет значения, в каком порядке загружается каждый отдельный плагин, потому что правильно написанные плагины будут использовать ловушки WordPress, которые позволят вам включить функциональность в определенные моменты позже при запуске WordPress. (Правильно написанные плагины также префиксируют свои функции и классы, чтобы не было никаких конфликтов.)

Дополнительная информация об API плагинов: http://codex.wordpress.org/Plugin_API/

Ответ на второй вопрос:

Полностью зависит от плагина. WordPress загружает в плагин только один файл, который обычно называется the-plugin-name.phpи содержит заголовок, описание, автора и т. Д. Вверху. Плагин должен загружать оставшиеся файлы, используя require_onceи так далее wp_enqueue_script.


Поэтому, если я создаю плагин, а затем выпускаю дополнительные плагины, которые должны запускаться после запуска исходного плагина, как я могу обеспечить этот порядок?
— urok93

Это действительно зависит от того, что вы пытаетесь сделать. Но, как правило, вы должны настроить каждый из них для запуска на определенном хуке, используя функцию add_action (), которая позволяет вам устанавливать приоритет. codex.wordpress.org/Function_Reference/add_action
— SeventhSteel

@SeventhSteel Но что, если плагин полагается на ловушку, созданную другим плагином. Если один плагин использует apply_filters()для создания хука, но работает перед плагином, который использует add_filter(), то будет ли он работать? По логике, похоже, что apply_filters()уже add_filter()сработал , поэтому вызовы во втором плагине ничего не сделают. Имеет ли значение, в каком порядке плагины загружаются при использовании только созданных плагинами хуков?
— trusktr

Важно то, что загружено временем apply_filters(). add_filter()должен бежать раньше apply_filters(). Если он add_filter()находится в файле плагина, а не в другой функции, он будет запущен, plugins_loadedчто обычно происходит раньше, чем вам нужно apply_filters().
— Седьмая сталь

Распространенным сценарием является наличие нескольких плагинов, которые добавляют свое содержимое после the_content- как определяется порядок их появления?
— Дан Кнаусс

9

Я считаю, что полезно включить действие «поздняя загрузка» в мой плагин, который запускается после того, как все плагины завершили свою загрузку следующим образом:

add_action('plugins_loaded', 'my_late_loader');

Затем функция my_late_loader запускается после всех других плагинов, что позволяет мне использовать хуки, определенные другими плагинами, в моей собственной функции my_other_function, которая инициируется в my_late_loader

/**
 * Late loading function for actions that must run after all plugins 
 * have loaded
 */
function my_late_loader(){
    add_action( 'some_hook', 'my_other_function', 10, 1);
}

Бит извилистый (я знаю), но это гарантирует, что хуки в других плагинах создаются до добавления независимо от порядка загрузки плагинов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.