Вопрос или проблема
В настоящее время у меня есть глобальная функция в файле functions.php
ein_error_log($message)
{
//вывести $message в файл...
}
Но я хочу начать использовать её в директории MU-Plugin, и она не знает о её существовании. Я предполагаю, что это связано с тем, что папка MU-Plugins считывается раньше папки темы в иерархии WordPress, что имеет смысл.
Но если это действительно так, как мне определить, какой MU-Plugin выполняется первым, чтобы убедиться, что все остальные файлы MU-Plugin могут работать в зависимости от указанного файла?
— ОБНОВЛЕНИЕ —
Я перенёс мой метод ein_error_log($message) в файл mu-plugin. Я осознал, как глупо было зависеть файлам mu-plugin от метода в файле functions.php. Но я все равно хотел, чтобы другие файлы mu-plugin также использовали этот метод логирования ошибок. Это требует, чтобы некоторые mu-plugins имели зависимость. Это небольшое, но важное для меня.
Спасибо https://salferrarello.com/functions-plugin-mu-plugin-wordpress/
Я смог подтвердить, когда выполняется код
Весь код в различных файлах WordPress можно рассматривать
как один большой список инструкций. Код выполняется построчно,
начиная с начала этого списка до конца этого
списка. Порядок, в общем, следующий.
- основной код WordPress
- код mu-plugins
- плагины
- functions.php
- код темы для конкретного отображаемого шаблона
Но это не отвечает на вопрос о порядке выполнения MU_plugins (алфавитный, по степени важности?)
Поэтому моё текущее решение заключалось в том, чтобы добавить
include('/my-functions.php');
в любой файл MU-Plugin, который использует ‘../mu-plugin/my-functions.php’.
Это работает.
Я бы сказал, что в целом вы хотите запускать как можно меньше кода прямо из файла вашего плагина. Гораздо лучше использовать хуки вроде muplugins_loaded
или plugins_loaded
, чем позже, тем лучше.
Таким образом, код выполняется только после инициализации всех плагинов, что означает, что вам больше не нужно беспокоиться о порядке загрузки.
Ответ или решение
Где разместить глобальные функции в WordPress?
Когда речь идет о разработке на WordPress, организация кода и правильное размещение функций имеет критическое значение для поддерживаемости и функциональности вашего проекта. В вашем случае, вы уже сделали шаг к улучшению структуры, переместив свою функцию ein_error_log($message)
из файла functions.php
в директорию MU-Plugin. Это уже является правильным направлением.
Чтобы эффективно реализовать ваши глобальные функции, такие как ein_error_log
, в инфраструктуре MU-Plugins, рассмотрим несколько ключевых аспектов:
1. Понимание иерархии загрузки в WordPress
Как вы правильно заметили, WordPress загружает файлы по определенной иерархии. Важно помнить о последовательности:
- core (ядро) WordPress
- MU-Plugins
- обычные плагины
- файл
functions.php
вашей темы - код текущей темы
Это означает, что файлы MU-Plugin загружаются до functions.php
, и это может быть причиной, по которой ваш MU-Plugin не может обнаружить глобальную функцию, ранее определенную в functions.php
.
2. Способы организации глобальных функций
Чтобы сделать ваш код более модульным и избежать зависимости между плагинами и темами, есть несколько подходов:
a. Создание единого файла функций
Поместите все ваши глобальные функции в один файл, например my-global-functions.php
, и разместите его в директории MU-Plugins. Затем вам нужно убедиться, что все ваши другие MU-Plugins могут использовать этот файл. Это обеспечит, что функции загружаются до использования:
// my-global-functions.php
if ( ! function_exists('ein_error_log') ) {
function ein_error_log($message) {
// Логирование сообщения в файл...
}
}
b. Использование хуков
Как вы уже упомянули, использование хуков, таких как muplugins_loaded
, очень удобно для минимизации выполняемого кода прямо в файле плагина. Это позволяет вашему коду исполняться после загрузки всех MU-Plugins.
Пример использования:
add_action('muplugins_loaded', function() {
include_once dirname(__FILE__) . '/my-global-functions.php';
});
Такой подход гарантирует, что при загрузке вашего основного файла функций, все зависимости уже разрешены.
3. Управление порядком загрузки MU-Plugins
В случае, если вам нужно контролировать порядок загрузки файлов в папке MU-Plugins, стоит помнить, что загрузка происходит в алфавитном порядке. Вы можете пронумеровать ваши файлы или использовать приставки, чтобы установить их последовательность. Например:
01-my-global-functions.php
02-another-mu-plugin.php
Эта практическая рекомендация даст вам возможность четко управлять порядком выполнения функций.
4. Заключение
Переход от использования глобальных функций в файле functions.php
к их организации в MU-Plugin является хорошей практикой, повышающей модульность и переиспользуемость вашего кода. Следуя вышеупомянутым рекомендациям, вы сможете избежать зависимости между MU-Plugin файлами и обеспечите их корректное взаимодействие.
Окончательная организация вашего кода не только улучшит структуру проекта, но и облегчит его поддержку в будущем.