load-(page_hook)хук-событиеWP 2.1.0

Срабатывает на отдельной странице админ-панели. На какой именно странице сработает хук указывается в (page_hook). Хук не передает никаких данных.

Обычно этот хук не используется напрямую и достаточно зарегистрировать страницу в админ-панели, с помощью функций добавления меню: add_theme_page(), add_menu_page(), add_options_page(), add_submenu_page()... т.е. всех функций add_*_page().

Каждая функция добавления меню и производные от них функции: add_*_page(), например add_options_page() возвращают специальный код, называемый "Page Hook Suffix". Этот код нужно использовать в (page_hook), чтобы выполнять действия только на нужной странице, а не везде в админке.

load-(page_hook) срабатывает на определенной странице плагина, после хуков: init, admin_menu, admin_init, current_screen, но до вывода контента самой страницы, т.е. до хуков: admin_print_styles, admin_print_scripts, admin_head, admin_notices.

Например, зарегистрируем страницу в подраздел "Инструменты" и получим хук для нашей новой страницы, который будет срабатывать только на ней:

add_action( 'admin_menu', 'test_load');
function test_load() {
	$hook_suffix = add_management_page( 'Test', 'Test', 8, 'testload');

	add_action( "load-$hook_suffix", 'my_load_function' );
	// Так, полное название хука будет "load-tools_page_testload".
	// А в функции my_load_function() мы будем использовать код,
	// который будет работать только на нашей созданной странице Test.
}

Название суффикса (page_hook) можно также получить с помощью функции get_plugin_page_hook( $plugin_page, $parent_page )

Почти идентичный load-(page_hook) хук - просто $page_hook - он срабатывает чуть позже и выполняет туже задачу.

Если WP не сможет получить $page_hook через функцию get_plugin_page_hook(), то будет выполняться хук 'load-($plugin_page)', где $plugin_page это название плагина - basename().

Во всех остальных случаях выполняется хук 'load-($pagenow)' где $pagenow - глобальная переменная, хранит название текущего php файла, например: 'post-new.php', 'admin.php'.

Использование

add_action( 'load-edit.php', 'post_listing_page' );
function post_listing_page() {
	// код для страницы админки edit.php (список постов)
}

Примеры

0

#1 Пример использования

В этом примере мы регистрируем страницу настроек и разделяем действия: HTML код страницы обрабатываем отдельно, а прочие действия вешаем на другую функцию. Сделать это удобно с помощью хука load-(page_hook).

Предположим, что наш плагин обязательно нужно настроить. И мы вешаем сообщение в админке, на все страницы, если плагин еще не настроен (через хук admin_notices). Но такое сообщение не должно показываться на странице настроек самого плагина:

<?php
add_action('admin_menu', 'my_plugin_menu');

// Здесь мы может проверить все ли опции плагина сконфигурированы. 
// Например, можем проверить существуют ли опции плагина. Если нет, 
// то добавим хук, который их установит
// Сейчас хук всегда активен!
add_action( 'admin_notices', 'my_plugin_admin_notices' );

function my_plugin_menu() {
	// Регистрируем страницу настроек плагина и получаем её суффикс
	$hook_suffix = add_options_page('My Plugin Options', 'My Plugin', 'manage_options', 'my-unique-identifier', 'my_plugin_options');

	// Используем полученный суффикс, чтобы выполнить действия только для нашей страницы
	add_action( 'load-' . $hook_suffix , 'my_load_function' );
}

function my_load_function() {
	// Тут все будет работать только для нашей страницы настроек плагина. Поэтому тут не показываем сообщение (удаляем вышедобавленный хук
	remove_action( 'admin_notices', 'my_plugin_admin_notices' );
}

function my_plugin_admin_notices() {
	echo "<div id='notice' class='updated fade'><p>Вы не настроили плагин. Сделайте же это!</p></div>\n";
}
// страница настроек плагина
function my_plugin_options() {
	if( ! current_user_can('manage_options') )  {
		wp_die( __('You do not have sufficient permissions to access this page.') );
	}
	echo '<div class="wrap">';
	echo '<p>Здесь HTML код настроек.</p>';
	echo '</div>';
}
?>
0

#2 Подключаем скрипт плагина только на его страницах

add_action( 'admin_init', 'my_plugin_admin_init' );
add_action( 'admin_menu', 'my_plugin_admin_menu' );

function my_plugin_admin_init() {
	/* Регистрируем наш скрипт. */
	wp_register_script( 'my-plugin-script', plugins_url('/script.js', __FILE__) );
}

function my_plugin_admin_menu() {
	/* Регистрируем страницу нашего плагина */
	$page = add_submenu_page( 
		'edit.php', // Родительская страница меню
		__( 'Мой плагин', 'myPlugin' ), // Название пункта меню
		__( 'Мой плагин', 'myPlugin' ), // Заголовок страницы
		'manage_options', // Возможность, определяющая уровень доступа к пункту
		'my_plugin-options', // Ярлык (часть адреса) страницы плагина
		'my_plugin_manage_menu' // Функция, которая выводит страницу
	);

	/* Используем зарегистрированную страницу для загрузки скрипта */
	add_action( "admin_print_scripts-{$page}", 'my_plugin_admin_scripts' );
}

function my_plugin_admin_scripts() {
	/*
	 * Эта функция будет вызвана только на странице плагина, подключаем наш скрипт
	 */
	wp_enqueue_script( 'my-plugin-script' );
}

function my_plugin_manage_menu() {
	/* Выводим страницу плагина */
}

Список изменений

С версии 2.1.0 Введена.

Где вызывается хук

В файле: /wp-admin/admin.php
load-(page_hook)
wp-admin/admin.php 237
do_action( "load-{$page_hook}" ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

Где используется хук в WordPress

wp-admin/includes/admin-filters.php 131
add_action( 'load-plugins.php', 'wp_plugin_update_rows', 20 ); // After wp_update_plugins() is called.
wp-admin/includes/admin-filters.php 132
add_action( 'load-themes.php', 'wp_theme_update_rows', 20 ); // After wp_update_themes() is called.
wp-admin/includes/class-custom-background.php 78
add_action( "load-{$page}", array( $this, 'admin_load' ) );
wp-admin/includes/class-custom-background.php 79
add_action( "load-{$page}", array( $this, 'take_action' ), 49 );
wp-admin/includes/class-custom-background.php 80
add_action( "load-{$page}", array( $this, 'handle_upload' ), 49 );
wp-includes/update.php 1156
add_action( 'load-plugins.php', 'wp_update_plugins' );
wp-includes/update.php 1157
add_action( 'load-update.php', 'wp_update_plugins' );
wp-includes/update.php 1158
add_action( 'load-update-core.php', 'wp_update_plugins' );
wp-includes/update.php 1162
add_action( 'load-themes.php', 'wp_update_themes' );
wp-includes/update.php 1163
add_action( 'load-update.php', 'wp_update_themes' );
wp-includes/update.php 1164
add_action( 'load-update-core.php', 'wp_update_themes' );