load-(page_hook)
Спрацьовує на окремій сторінці адмін-панелі. На якій сторінці спрацює хук вказується в (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 (список постів)
}Приклади
#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>';
}
?>#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
do_action("load-{$page_hook}"); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscoresДе використовується хук у WordPress
add_action( 'load-plugins.php', 'wp_plugin_update_rows', 20); // After wp_update_plugins() is called.
add_action( 'load-themes.php', 'wp_theme_update_rows', 20); // After wp_update_themes() is called.