plugins_loaded
Срабатывает сразу после того, как все активированные плагины загрузились.
Срабатывает на раннем этапе, до событий: setup_theme, after_setup_theme, init, wp_loaded.
Обычно используется для инициализации основного кода плагина. Для того, чтобы код вашего плагина срабатывал после загрузки pluggable функций WordPress и других плагинов, которые в свою очередь могут изменять некоторые функции WordPress.
Новые хуки в WP 5.1
В WordPress есть хуки: plugins_loaded, network_plugins_loaded и mu_plugins_loaded, но они запускаются только после загрузки всех плагинов и нет простого способа выполнить произвольный код между каждым загружаемым плагином или только после загрузки плагина X. Это затрудняет мониторинг и отладку на этапе загрузки отдельного плагина.
В WordPress 5.1 появились хуки, которые будут срабатывать после загрузки каждого плагина. Каждый Хук будет передавать путь к основному файлу плагина.
ВАЖНО! Нельзя заменить хук plugins_loaded хуком plugin_loaded — это разные вещи!
Использование
add_action( 'plugins_loaded', 'wp_kama_plugins_loaded_action' );
/**
* Function for `plugins_loaded` action-hook.
*
* @return void
*/
function wp_kama_plugins_loaded_action(){
// action...
}
Примеры
#1 Инициализация плагина
Допустим, в плагине нужно получить текущего пользователя и что-то с ним делать. Для этого есть функция wp_get_current_user(). Но если использовать её прямо в файле плагина без хуков, она работать не будет. Потому что она подключается после подключения всех активных плагинов, и нашего в том числе. Т.е. если использовать wp_get_current_user() прямо в файле плагина, функция будет вызвана до того как определена, что вызовет критическую ошибку PHP типа: "вызвана несуществующая функция".
Для этого и подобных случаев, нужно событие plugins_loaded. Короткий пример:
<?php
/*
Plugin Name: Название плагина
Plugin URI: http://страница_с_описанием_плагина_и_его_обновлений
Description: Краткое описание плагина.
Version: Номер версии плагина, например: 1.0
Author: Имя автора плагина
Author URI: http://страница_автора_плагина
*/
// какие либо действия не связанные с основной работой плагина
// Например установка названий таблиц плагина в глобальную $wpdb
global $wpdb;
$wpdb->mytable = $wpdb->prefix .'mytable';
// или подключение файлов
require_once plugin_dir_path( __FILE__ ) .'/upgrade.php';
// а теперь переходим к работе плагина,
// подключив весь его основной код во время события plugins_loaded
add_action( 'plugins_loaded', 'my_plugin_init' );
function my_plugin_init() {
$cuser = wp_get_current_user();
// если пользователь с ролью 'newrole'
if( in_array( 'newrole', (array) $cuser->roles ) ){
// делаем что-то для этой роли
}
else{
// делаем что-то для остальных ролей
}
}
Список изменений
| С версии 1.5.0 | Введена. |
Где вызывается хук
do_action( 'plugins_loaded' );
Где используется хук в WordPress
add_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 );
add_action( 'plugins_loaded', 'wp_maybe_load_embeds', 0 );
add_action( 'plugins_loaded', '_wp_customize_include' );
add_action( 'plugins_loaded', 'wp_initialize_theme_preview_hooks', 1 );
add_action( 'plugins_loaded', '_wp_add_additional_image_sizes', 0 );