Хук load-{$page_hook}
используется в WordPress для выполнения определённых действий до загрузки страницы админ-панели. Этот хук позволяет связать код с конкретной страницей, а не со всеми страницами админки, что делает его полезным для оптимизации работы плагинов и тем. В статье рассмотрим, как использовать этот хук и приведём примеры его применения.
Хук load-(page_hook)
срабатывает перед загрузкой определённой страницы в админ-панели WordPress. Суффикс page_hook
формируется при регистрации страницы через функции, такие как add_menu_page()
, add_submenu_page()
, add_options_page()
и т.д. Этот суффикс уникален для каждой страницы и используется для привязки к конкретному экрану в админке.
do_action( “load-{$page_hook}” )
Пример использования: добавление уведомления для настройки плагина
Предположим, что наш плагин требует настройки, и мы хотим отображать уведомление на всех страницах админ-панели, пока настройки не завершены. Однако на странице самого плагина уведомление показываться не должно.
add_action('admin_menu', 'my_custom_plugin_menu');
// Добавляем уведомление на все страницы
add_action( 'admin_notices', 'my_custom_admin_notice' );
function my_custom_plugin_menu() {
// Регистрируем страницу настроек плагина и получаем её суффикс
$hook_suffix = add_options_page('Настройки плагина', 'Мой Плагин', 'manage_options', 'my-custom-plugin-settings', 'my_custom_plugin_options');
// Используем `load-(page_hook)`, чтобы убрать уведомление только на странице настроек плагина
add_action( "load-{$hook_suffix}", 'my_custom_remove_notice' );
}
// Удаляем уведомление на странице настроек плагина
function my_custom_remove_notice() {
remove_action( 'admin_notices', 'my_custom_admin_notice' );
}
// Функция, выводящая уведомление
function my_custom_admin_notice() {
echo "<div class='notice notice-warning'><p>Необходимо настроить плагин для правильной работы!</p></div>";
}
// Функция, выводящая HTML-контент страницы настроек
function my_custom_plugin_options() {
echo '<div class="wrap"><h1>Настройки моего плагина</h1><p>Настройте параметры вашего плагина здесь.</p></div>';
}
В этом примере, если плагин ещё не настроен, уведомление появится на всех страницах админ-панели, кроме страницы настроек самого плагина. Уведомление исчезает с помощью удаления действия my_custom_admin_notice
через load-(page_hook)
.
Пример: загрузка скрипта только на определённой странице плагина
Зачастую, чтобы не загружать лишние ресурсы, скрипты и стили плагина подключают только на его страницах. В этом примере мы подключим JavaScript-файл только для страницы настроек нашего плагина.
add_action( 'admin_menu', 'my_plugin_menu_setup' );
add_action( 'admin_init', 'my_plugin_register_scripts' );
// Регистрируем скрипт плагина
function my_plugin_register_scripts() {
wp_register_script( 'my-plugin-script', plugins_url( '/assets/js/custom-script.js', __FILE__ ), [], null, true );
}
function my_plugin_menu_setup() {
// Добавляем страницу настроек плагина
$hook_suffix = add_menu_page(
'Настройки плагина',
'Мой Плагин',
'manage_options',
'my-plugin-settings',
'my_plugin_settings_page'
);
// Подключаем скрипт только на зарегистрированной странице
add_action( "load-{$hook_suffix}", 'my_plugin_enqueue_scripts' );
}
function my_plugin_enqueue_scripts() {
wp_enqueue_script( 'my-plugin-script' );
}
// Функция, выводящая страницу настроек плагина
function my_plugin_settings_page() {
echo '<div class="wrap"><h1>Настройки моего плагина</h1><p>Здесь размещен HTML-контент страницы настроек.</p></div>';
}
В этом примере скрипт my-plugin-script
загружается только на странице настроек плагина, что снижает нагрузку на сайт за счёт уменьшения количества загружаемых ресурсов.
Пример: динамическое изменение данных только на странице плагина
С помощью load-(page_hook)
также можно динамически изменять данные только для страницы плагина. В этом примере мы добавляем данные о текущем пользователе в переменные, которые затем можно использовать на странице настроек.
add_action( 'admin_menu', 'custom_plugin_menu' );
function custom_plugin_menu() {
$hook_suffix = add_menu_page(
'Мой Плагин',
'Мой Плагин',
'manage_options',
'custom-plugin-settings',
'custom_plugin_settings_page'
);
// Используем хук `load-(page_hook)` для добавления данных
add_action( "load-{$hook_suffix}", 'custom_plugin_load_data' );
}
function custom_plugin_load_data() {
// Получаем данные о текущем пользователе
$current_user = wp_get_current_user();
$GLOBALS['custom_plugin_user_data'] = [
'username' => $current_user->user_login,
'email' => $current_user->user_email,
];
}
function custom_plugin_settings_page() {
// Доступ к данным текущего пользователя, добавленным через хук `load-{$page_hook}`
echo '<div class="wrap"><h1>Мой Плагин - Настройки</h1>';
echo '<p>Имя пользователя: ' . esc_html( $GLOBALS['custom_plugin_user_data']['username'] ) . '</p>';
echo '<p>Email: ' . esc_html( $GLOBALS['custom_plugin_user_data']['email'] ) . '</p>';
echo '</div>';
}
Этот пример показывает, как можно загружать данные о текущем пользователе и использовать их только на странице настроек плагина. Данные добавляются в глобальную переменную $GLOBALS
, и они отображаются в HTML-контенте страницы.
Заключение
Хук load-(page_hook)
позволяет выполнять код, привязанный только к определённым страницам админ-панели WordPress, что делает его особенно полезным для создания кастомизированного поведения в плагинах и темах.