get_current_screen()
Получает объект данных о текущей странице админ-панели.
С помощью этой функции можно, например, определить текущую страницу админки и использовать это в условии, чтобы, например, вывести что-либо на нужной странице админки. Или например, разделить работу скрипта для Страниц (page) и Записей (post) в админке.
current_screen — это самый ранний хук на котором можно использовать эту функцию. До этого хука данные о странице админки еще не собраны и функция вернет null.
Эта функция вернет null в AJAX запросе и вызовет Fatal Error на фронте (на фронте она не определена).
$current_screen (данные для этой функции) устанавливается поздно. После события init, когда уже начинает генерироваться HTML страницы админки. Определение переменной $current_screen происходит в файле wp-admin/admin.php функцией set_current_screen(). Файл admin.php подключается по всей админке.
Хуков нет.
Возвращает
WP_Screen|null. Объект данных WP_Screen или null, когда глобальная переменная $current_screen не установлена:
WP_Screen Object ( [id] => // Строка. Уникальный ID экрана. [action] => // Действие ассоциированное с экраном 'add' для *-new.php. Или пустой результат. [base] => post // Базовый тип экрана. Например, для страниц типа 'post-new.php' или 'post.php' базовый тип = 'post'. [parent_base] => edit // Базовый тип родительского пункта меню. Получается из $parent_file, удаляются параметры запроса и // '.php' расширение. Пр. 'edit.php?post_type=page' и 'edit.php?post_type=post' будут иметь родительскую базу 'edit' [parent_file] => edit.php // Родительский файл экрана из меню, пр.: 'edit.php?post_type=page', 'edit.php', 'options-general.php' [post_type] => post // Тип записи ассоциированный с экраном, если такой есть. Пр.:'edit.php?post_type=page' = 'page' [taxonomy] => // Таксономия ассоциированная с экраном, если есть. Пр.: 'edit-tags.php?taxonomy=category' = 'category' ... (разные данные) )
Примеры
#1 Таблица id экранов админки в WordPress
| Экран | Файл | $screen->id |
|---|---|---|
| Комментарии | /wp-admin/edit-comments.php | edit-comments |
| Темы | /wp-admin/themes.php | themes |
| Плагины | /wp-admin/plugins.php | plugins |
| Пост | /wp-admin/post.php | post |
| Пост (новый) | /wp-admin/post-new.php | post |
| Посты | /wp-admin/edit.php | edit-post |
| Страницы | /wp-admin/edit.php | edit-page |
| Тип записи | /wp-admin/edit.php | edit-{$post_type} |
| Термины | /wp-admin/edit-tags.php | edit-{$taxonomy} |
| Рубрики | /wp-admin/edit-tags.php | edit-category |
| Метки | /wp-admin/edit-tags.php | edit-post_tag |
| Медиа | /wp-admin/upload.php | upload |
| Юзеры | /wp-admin/users.php | users |
| МС Сайты | /wp-admin/network/sites.php | sites-network |
| МС Темы | /wp-admin/network/themes.php | themes-network |
| МС Юзеры | /wp-admin/network/users.php | users-network |
| МС Плагины | /wp-admin/network/plugins.php | plugins-network |
| MC Сайт: Темы | /wp-admin/network/site-themes.php | site-themes-network |
| MC Сайт: Юзеры | /wp-admin/network/site-users.php | site-users-network |
#2 Запустим какой-либо код на странице Виджетов
add_action( 'current_screen', 'wpkama_widgets_screen' );
function wpkama_widgets_screen(){
$screen = get_current_screen();
if( 'widgets' === $screen->id ){
// только на странице админки: Виджеты
}
} #3 Добавим скрипт только на страницу редактирования записи
Этот пример показывает как добавить javascript код в подвал админ-панели, только на страницах редактирования/создания записей. Текст добавляется через фильтр admin_footer, в котором проверяется информация текущего экрана, если это страница редактирования записи, то выводится код:
<?php
// сохранение поста в wordpress при помощи сочетания клавиш ctrl + s
add_filter( 'admin_footer', 'post_save_accesskey' );
function post_save_accesskey(){
// выходим если это не страница создания/редактирования записи
if( get_current_screen()->id !== 'post' )
return;
// // или можно так
// if( get_current_screen()->parent_base !== 'edit' )
// return;
?>
<script type="text/javascript">
jQuery(document).ready(function($){
// jQuery код
});
</script>
<?php
}
в этом примере get_current_screen() содержит такой массив (объект):
WP_Screen Object ( [action] => add [base] => post [columns:WP_Screen:private] => 2 [id] => page [in_admin:protected] => site [is_network] => [is_user] => [parent_base] => edit [parent_file] => edit.php?post_type=page [post_type] => page [taxonomy] => [is_block_editor] => [_help_tabs:WP_Screen:private] => Array ( [about-pages] => Array ( [title] => О страницах [id] => about-pages [content] => <p>Страницы похожи на записи тем, ...</p> [callback] => ) [inserting-media] => Array ( [title] => Вставка медиа-файлов [id] => inserting-media [content] => <p>Вы можете загружать и вставлять ....</p> [callback] => ) [page-attributes] => Array ( [title] => Атрибуты страницы [id] => page-attributes [content] => <p><strong>Родительская</strong> — ....</p> [callback] => ) ) [_help_sidebar:WP_Screen:private] => <p><strong>Дополнительная информация:</strong></p> ... [_options:WP_Screen:private] => Array ( [layout_columns] => Array ( [max] => 2 [default] => 2 ) ) [_show_screen_options:WP_Screen:private] => 1 [_screen_settings:WP_Screen:private] => <div class="editor-expand hidden"> ... Растягивать редактор на высоту окна.</label></div> )
#4 Вкладка помощи
Этот пример показывает как создать контекстную помощь на созданной вами странице админки. Страница создается с помощью функции add_options_page(), add_menu_page() и им подобным.
Допустим мы создали страницу с ярлыком 'my_admin_page', которая находится в пункте меню Настройки (options).
add_action( 'admin_menu', 'my_admin_add_page' );
function my_admin_add_page(){
$page_hook = add_options_page( 'Страница настроек', 'Страница настроек', 'manage_options', 'my_opt_page_slug', 'my_admin_page');
// добавляем контекст при загрузке страницы
add_action( "load-{$page_hook}", 'my_admin_add_help_tab' );
}
function my_admin_page(){
echo 'Код страницы';
}
function my_admin_add_help_tab(){
$screen = get_current_screen();
// контент для вкладки помощь
$screen->add_help_tab( array(
'id' => 'my_help_tab',
'title' => 'Помощь по странице',
'content' => '<p>Вспомогательное описание объясняющее непонятные места на странице</p>',
) );
}
Заметки
- Global. WP_Screen. $current_screen WordPress current screen object.
Список изменений
| С версии 3.1.0 | Введена. |
Код get_current_screen() get current screen WP 6.9
function get_current_screen() {
global $current_screen;
if ( ! isset( $current_screen ) ) {
return null;
}
return $current_screen;
}