Где разместить мои глобальные функции?

Вопрос или проблема

В настоящее время у меня есть глобальная функция в файле 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 можно рассматривать
как один большой список инструкций. Код выполняется построчно,
начиная с начала этого списка до конца этого
списка. Порядок, в общем, следующий.

  1. основной код WordPress
  2. код mu-plugins
  3. плагины
  4. functions.php
  5. код темы для конкретного отображаемого шаблона

Но это не отвечает на вопрос о порядке выполнения 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 загружает файлы по определенной иерархии. Важно помнить о последовательности:

  1. core (ядро) WordPress
  2. MU-Plugins
  3. обычные плагины
  4. файл functions.php вашей темы
  5. код текущей темы

Это означает, что файлы 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 файлами и обеспечите их корректное взаимодействие.

Окончательная организация вашего кода не только улучшит структуру проекта, но и облегчит его поддержку в будущем.

Оцените материал
Добавить комментарий

Капча загружается...