load-(page_hook) хук-подіяWP 2.1.0

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

Зазвичай цей хук безпосередньо не використовується і достатньо зареєструвати сторінку в адмін-панелі, за допомогою функцій додавання меню: 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
wp-admin/admin.php 237

do_action("load-{$page_hook}"); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

Де використовується хук у WordPress

wp-admin/includes/admin-filters.php 129

add_action( 'load-plugins.php', 'wp_plugin_update_rows', 20); // After wp_update_plugins() is called.

wp-admin/includes/admin-filters.php 130

add_action( 'load-themes.php', 'wp_theme_update_rows', 20); // After wp_update_themes() is called.

wp-includes/update.php 963

add_action( 'load-plugins.php', 'wp_update_plugins');

wp-includes/update.php 964

add_action( 'load-update.php', 'wp_update_plugins');

wp-includes/update.php 965

add_action( 'load-update-core.php', 'wp_update_plugins');

wp-includes/update.php 969

add_action( 'load-themes.php', 'wp_update_themes');

wp-includes/update.php 970

add_action( 'load-update.php', 'wp_update_themes');

wp-includes/update.php 971

add_action( 'load-update-core.php', 'wp_update_themes');

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *