- 13.04.16
- 21:52
- 6797
- 0
Ограничить выдачу скриптов и стилей определённым экраном можно так:
1 2 3 4 5 6 7 8 9 |
add_action('admin_enqueue_scripts', function () { $scr = get_current_screen(); if ($scr->id == 'screen_id') { // поместить в очередь скрипты для экрана 'screen_id': wp_enqueue_style( ... ); wp_enqueue_script( ... ); ... } }); |
Список идентификаторов экранов WordPress приведён в конце заметки.
Идентификаторы пользовательских экранов возвращаются функциями add_menu_page()
, add_submenu_page()
и её производными. Эти функции вызываются по хуку 'admin_menu'
на ранних этапах загрузки WordPress, поэтому ко времени выполнения 'admin_enqueue_scripts'
идентификаторы уже известны.
Поэтому создание экрана можно организовать так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
add_action('plugins_loaded', array('MyPlugin', 'plugins_loaded')); class MyPlugin { private static $scr_id; // идентификатор экрана хранится здесь public static function plugins_loaded () { add_action('admin_menu', array(__CLASS__, 'admin_menu')); add_action('admin_enqueue_scripts', array(__CLASS__, 'admin_enqueue_scripts')); } public static function admin_menu () { // создание экрана, получение идентификатора: self::$scr_id = add_submenu_page(...); } public static function admin_enqueue_scripts () { $screen = get_current_screen(); if ($screen->id != self::$scr_id) return; // скрипты и стили для экрана self::$scr_id wp_enqueue_style( ... ); wp_enqueue_script( ... ); } } |
При использовании анонимных функций обработчик 'admin_enqueue_scripts'
может быть задан сразу после создания экрана:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
add_action('admin_menu', function () { $scr_id = add_submenu_page(...); add_action('admin_enqueue_scripts', function () use ($scr_id) { $screen = get_current_screen(); if ($screen->id != $scr_id) return; // скрипты и стили для $scr_id: wp_enqueue_style( ... ); wp_enqueue_script( ... ); }); }); |
Замечание 1: в обработчике 'admin_menu'
вызывать get_current_screen()
нет смыла — здесь текущий экран ещё не определён.
Замечание 2: хук "admin_print_scripts-{$scr_id}"
может показаться более удобным, т. к. активируется только на экране $scr_id
, но использовать его всё-равно не следует: разработчики WordPress прямо заявляют об этом на странице хука 'admin_print_scripts'
.
В то же время это не означает, что плагин не будет работать: в текущей версии WordPress (4.5) выдача скриптов и стилей из очередей происходит после обоих этих действий по хуку 'admin_print_scripts'
с приоритетом 20. Поэтому при регистрации скриптов в обработчиках "admin_print_scripts-*"
работать плагин будет, но при дальнейшем развитии WordPress сохранение такой ситуации не гарантировано, и после очередного обновления CMS плагин рискует оказаться неработоспособным (если, конечно, ограничение рамками 'admin_enqueue_scripts'
не будет снято).
Замечание 3: в консоли управления мультисайтом (экраны /wp-admin/network/*
) идентификаторы экранов оканчиваются суффиксом '-network'
. Функции типа add_submenu_page()
этот суффикс не добавляют. Поэтому, если плагин предназначен для работы исключительно с целым мультисайтом (имеет опцию Network: true
в заголовке), суффикс приходится добавлять вручную:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php /* * Plugin Name: My Plugin * Network: true */ add_action('network_admin_menu', function () { $scr_id = add_submenu_page(...); $scr_id .= '-network'; // суффикс add_action('admin_enqueue_scripts', function () use ($scr_id) { $screen = get_current_screen(); if ($screen->id != $scr_id) return; // TODO скрипты и стили для $scr_id добавить здесь }); }); |
Идентификаторы экранов WordPress
Идентификаторы стандартных экранов постоянны, их можно задавать строкой непосредственно в обработчиках 'admin_enqueue_scripts'
.
название экрана | идентификатор | |
---|---|---|
экран редактирования термов таксономии $taxonomy
|
"edit-{$taxonomy}" |
|
идентификатор одинаков как для экрана терма, так и для экрана самой таксономии; | ||
посты пользовательских типов $post_type
|
||
все посты | "edit-{$post_type}" |
|
редактирование поста | $post_type |
|
страницы (посты типа ‘page’) | ||
все страницы | 'edit-page' |
|
экран редактирования страницы | 'page' |
|
записи (посты типа ‘post’) | ||
все записи | 'edit-post' |
|
экран редактирования записи | 'post' |
|
штатные таксономии | ||
метки | 'edit-post_tag' |
|
рубрики | 'edit-category' |
|
консоль | 'dashboard' |
|
обновления | 'update-core' |
|
опции | ||
общие | 'options-general' |
|
написание | 'options-writing' |
|
чтение | 'options-reading' |
|
обсуждение | 'options-discussion' |
|
медиафайлы | 'options-media' |
|
постоянные ссылки | 'options-permalink' |
|
инструменты | ||
все инструменты | 'tools' |
|
импорт | 'import' |
|
экспорт | 'export' |
|
пользователи | ||
все пользователи | 'users' |
|
новый пользователь | 'user' |
|
профиль | 'profile' |
|
редактирование пользователя | 'user-edit' |
|
плагины | ||
установленные | 'plugins' |
|
добавить новый | 'plugin-install' |
|
редактор | 'plugin-editor' |
|
внешний вид | ||
темы | 'themes' |
|
настроить | 'customize' |
|
виджеты | 'widgets' |
|
меню | 'nav-menus' |
|
редактор | 'theme-editor' |
|
комментарии | ||
комментарии | 'edit-comments' |
|
экран редактирования комментария | 'comment' |
|
медиафайлы | ||
библиотека | 'upload' |
|
добавить новый | 'media' |
PS.: на момент данной редакции этой заметки последней версией WordPress является 4.5.