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

21

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

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

urok93
источник
Вы можете очень глубоко отлаживать с помощью этого плагина: 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.

SeventhSteel
источник
Поэтому, если я создаю плагин, а затем выпускаю дополнительные плагины, которые должны запускаться после запуска исходного плагина, как я могу обеспечить этот порядок?
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);
}

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

Клинтон
источник