Хук plugins_loaded
в WordPress играет важную роль в процессе загрузки плагинов. Он срабатывает сразу после того, как все активированные плагины были загружены, но еще до выполнения таких событий, как setup_theme
, after_setup_theme
, init
и wp_loaded
.
do_action( ‘plugins_loaded’ )
Этот хук полезен, если вам нужно выполнить действия сразу после загрузки плагинов, но до того, как начнется настройка темы или другие этапы инициализации WordPress. Одним из ключевых применений является инициализация основного кода плагина, работающего с функциями, которые зависят от других активированных плагинов или pluggable функций WordPress.
Когда Использовать Хук plugins_loaded
?
- Для инициализации плагинов: Это место для подготовки плагина к работе после его загрузки.
- Настройка фильтров и хуков: Вы можете настроить фильтры или подключить собственные хуки, которые должны срабатывать сразу после загрузки всех плагинов.
- Подключение pluggable функций: Функции, которые могут быть переопределены плагинами, доступны на этом этапе. Это позволяет плагинам изменять поведение стандартных функций WordPress.
Хук plugins_loaded
срабатывает раньше, чем другие важные хуки, такие как setup_theme
и after_setup_theme
, что делает его удобным для выполнения действий, которые не зависят от темы.
Пример 1: Инициализация Плагина и Получение Текущего Пользователя
Когда плагин должен выполнить действия с текущим пользователем, важно убедиться, что все плагины загружены и функции WordPress, такие как wp_get_current_user()
, доступны. Если попытаться вызвать эту функцию до загрузки плагинов, это приведет к ошибке. Хук plugins_loaded
гарантирует, что все плагины уже загружены.
add_action( 'plugins_loaded', 'my_plugin_init' );
function my_plugin_init() {
$current_user = wp_get_current_user();
if ( in_array( 'special_role', (array) $current_user->roles ) ) {
// Выполнить действия для пользователей с ролью 'special_role'
} else {
// Действия для всех остальных пользователей
}
}
В этом примере плагин проверяет текущего пользователя и выполняет действия в зависимости от его роли, используя функцию wp_get_current_user()
, доступную на этом этапе загрузки.
Пример 2: Регистрация Фильтров и Хуков Плагина
Если плагин должен зарегистрировать фильтры или хуки, которые зависят от других активированных плагинов, это также можно сделать в хуке plugins_loaded
.
add_action( 'plugins_loaded', 'my_plugin_register_hooks' );
function my_plugin_register_hooks() {
// Пример фильтра, который работает только после загрузки всех плагинов
add_filter( 'the_content', 'my_custom_content_filter' );
}
function my_custom_content_filter( $content ) {
// Добавляем к контенту какой-либо текст
return $content . ' - Этот контент был изменен плагином.';
}
Здесь фильтр the_content
регистрируется после того, как все плагины были загружены, что гарантирует, что все другие плагины, которые могут изменять контент, уже будут учтены.
Пример 3: Подключение Дополнительных Файлов Плагина
Когда плагин использует несколько файлов, важно подключить дополнительные файлы только после того, как все плагины загружены, чтобы избежать ошибок из-за ненадежных зависимостей.
add_action( 'plugins_loaded', 'my_plugin_load_files' );
function my_plugin_load_files() {
// Подключаем дополнительные файлы плагина
require_once plugin_dir_path( __FILE__ ) . 'includes/functions.php';
require_once plugin_dir_path( __FILE__ ) . 'includes/setup.php';
}
Этот код гарантирует, что файлы плагина будут подключены только после того, как WordPress загрузит все активированные плагины.
Пример 4: Использование Методов Классов в Плагине
Если плагин использует объектно-ориентированное программирование, можно инициализировать его в хук plugins_loaded
, чтобы создать экземпляр класса.
add_action( 'plugins_loaded', array( 'MyPlugin_Class', 'instance' ) );
class MyPlugin_Class {
private function __construct() {
// Инициализация плагина
$this->init();
}
public static function instance() {
static $instance = null;
if ( is_null( $instance ) ) {
$instance = new MyPlugin_Class();
}
return $instance;
}
private function init() {
// Действия при инициализации
wp_die( __( 'Привет, мир!', 'text-domain' ) );
}
}
Здесь используется паттерн «Одиночка» для создания одного экземпляра класса плагина после загрузки всех плагинов.
Заключение
Хук plugins_loaded
— это ключевая точка для инициализации плагинов в WordPress. Он дает возможность работать с функциями и фильтрами, которые зависят от других плагинов или pluggable функций. Использование этого хука позволяет избежать ошибок, связанных с зависимостями, и гарантировать, что ваш плагин будет работать корректно в контексте всех активированных плагинов.