WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

get_current_screen() WP 3.1

Получает объект данных о текущей странице админ-панели.

С помощью этой функции можно, например, определить текущую страницу админки и использовать это в условии, чтобы, например, вывести что-либо на нужной странице админки. Или например, разделить работу скрипта для Страниц (page) и Записей (post) в админке.

current_screen — это самый ранний хук на котором можно использовать эту функцию. До current_screen данные о странице админки еще не собраны и функция вернет null.

Функцию нельзя использовать на фронте или в AJAX запросах.

$current_screen (данные для этой функции) устанавливается поздно. После события init, когда уже начинает генерироваться HTML для страницы админки. Определение происходит в файле wp-admin/admin.php функцией set_current_screen(). Этот файл подключается повсеместно в админке.

Работает на основе: WP_Screen()
Основа для: add_screen_option()
1 раз = 0.000016с = очень быстро | 50000 раз = 0.01с = скорость света

Хуков нет.

Возвращает

Объект данных:

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] => 
	[_help_tabs:WP_Screen:private] => Array
		(
			[about-pages] => Array
				(
					[title] => О страницах
					[id] => about-pages
					[content] => <p>Страницы похожи на записи тем, что у них есть заголовок, текст и метаданные, но отличаются от них тем, что не принадлежат к хронологическому потоку блога, а являются постоянными. Страницам не присваиваются рубрики и метки, однако они могут иметь иерархию. Можно размещать одни страницы под другими, выбирая родительскую страницу и получая группу страниц.</p><p>Создание страницы очень похоже на создание записи — экран можно таким же образом настраивать при помощи перетаскивания, вкладки «Настройки экрана» и сворачивания/разворачивания блоков. На этом экране также есть удобный полноэкранный режим, доступный как в визуальном, так и в текстовом редакторе по специальной кнопке. Редактор страниц работает так же, как и редактор записей, однако в блоке «Атрибуты страницы» есть несколько элементов, присущих только страницам:</p>
					[callback] => 
				)

			[inserting-media] => Array
				(
					[title] => Вставка медиа-файлов
					[id] => inserting-media
					[content] => <p>Вы можете загружать и вставлять медиа-файлы (изображения, аудио-файлы, документы и т.д.), нажав кнопку «Добавить медиафайл». Можно выбрать изображения и файлы, уже загруженные в библиотеку, либо загрузить новые файлы и добавить их в запись или страницу. Чтобы создать галерею, выберите изображения и нажмите кнопку «Создать новую галерею».</p><p>Можно также добавлять медиа-файлы со многих популярных сайтов, включая Twitter, YouTube, Flickr и другие, просто скопировав адрес файла и вставив его в текст вашей записи или страницы отдельной строкой. Прочитайте статью в Кодексе, чтобы <a href="http://codex.wordpress.org/Вставка_объектов">узнать больше о вставке объектов</a>.</p>
					[callback] => 
				)

			[page-attributes] => Array
				(
					[title] => Атрибуты страницы
					[id] => page-attributes
					[content] => <p><strong>Родительская</strong> — вы можете организовать иерархию страниц. Например, создать страницу «Обо мне», внутри которой будут страницы «Биография» и «Моя собака». По уровню вложенности нет никаких ограничений.</p><p><strong>Шаблон</strong> — в некоторых темах для определённых страниц могут быть особые шаблоны с дополнительными функциями или другим дизайном. Вы увидите их в этом списке.</p><p><strong>Порядок</strong> — страницы обычно сортируются по алфавиту, но вы можете задать свой собственный порядок, введя число (1 — первая и т.д.) в это поле.</p>
					[callback] => 
				)

		)

	[_help_sidebar:WP_Screen:private] => <p><strong>Дополнительная информация:</strong></p><p><a href="http://codex.wordpress.org/Pages_Add_New_Screen" target="_blank">Документация по добавлению новых страниц</a></p><p><a href="http://codex.wordpress.org/Pages_Screen#Editing_Individual_Pages" target="_blank">Документация по редактированию страниц</a></p><p><a href="http://ru.forums.wordpress.org/" target="_blank">Форумы поддержки</a></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 for="editor-expand-toggle"><input type="checkbox" id="editor-expand-toggle" checked='checked' />Растягивать редактор на высоту окна.</label></div>
)

#3 Вкладка помощи

Этот пример показывает как создать контекстную помощь на созданной вами странице админки. Страница создается с помощью функции 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() WP 5.5.1

wp-admin/includes/screen.php
<?php
function get_current_screen() {
	global $current_screen;

	if ( ! isset( $current_screen ) ) {
		return null;
	}

	return $current_screen;
}

Cвязанные функции

Из раздела: Админ-панель

2 коммента