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.
add_action( 'load-plugins.php', 'wp_update_plugins');
add_action( 'load-update.php', 'wp_update_plugins');
add_action( 'load-update-core.php', 'wp_update_plugins');
add_action( 'load-themes.php', 'wp_update_themes');
add_action( 'load-update.php', 'wp_update_themes');
add_action( 'load-update-core.php', 'wp_update_themes');