get_admin_page_parent()WP 1.5.0

Получает ключ родительской страницы админки, относительно текущей страницы.

Устанавливает глобальную переменную админки global $parent_file в которой храниться имя родительского файла, который отвечает за вывод текущей страницы админки. Это имя может быть использовано в ключах глобального массива $submenu: $submenu[ $parent ], в который добавляются подпункты меню через функцию add_submenu_page().

1 раз — 0.000001 сек (скорость света) | 50000 раз — 0.60 сек (очень быстро) | PHP 7.3.20, WP 5.5.3

Хуков нет.

Возвращает

Строку. Ключ родительской страницы админке. Примеры возвращаемых значений:

profile.php
users.php
edit.php
edit.php?post_type=page
tools.php
edit-tags.php?taxonomy=link_category

Использование

get_admin_page_parent( $parent );
$parent(строка)
Ярлык (slug) родительского пункта админ-меню (или имя файла для дефолтных пунктов меню).
По умолчанию: ''

Примеры

0

#1 Отобразим название родительского файла дефолтного пункта меню

Добавим под-пункт меню с помощью add_submenu_page() в пункт меню "Инструменты":

add_action( 'admin_menu', 'mat_add_submenu_page' );

function mat_add_submenu_page() {
	add_submenu_page(
		'tools.php',
		'Массовое добавление терминов',
		'Массовое добавление терминов',
		'manage_categories',
		'mat-admin',
		'mat_admin_page_content'
	);
}

function mat_admin_page_content() {
	echo get_admin_page_parent(); // Выведет: tools.php
}
0

#2 Отобразим название родительского файла у CF7

Добавим подменю в основное меню Contact Form 7.

add_action( 'admin_menu', 'cf7_submodule_add_menu_page' );

function cf7_submodule_add_menu_page() {

	add_submenu_page(
		'wpcf7',
		'Модуль для CF7',
		'Страница модуля для CF7',
		'wpcf7_read_contact_forms',
		'cf7-submodule-admin',
		'cf7_submodule_admin_page_content'
	);
}

function cf7_submodule_admin_page_content() {
	echo get_admin_page_parent(); // Выведет: wpcf7
}

Заметки

  • Global. Строка. $parent_file
  • Global. Массив. $menu
  • Global. Массив. $submenu
  • Global. Строка. $pagenow The filename of the current screen.
  • Global. Строка. $typenow The post type of the current screen.
  • Global. Строка. $plugin_page
  • Global. Массив. $_wp_real_parent_file
  • Global. Массив. $_wp_menu_nopriv
  • Global. Массив. $_wp_submenu_nopriv

Список изменений

С версии 1.5.0 Введена.

Код get_admin_page_parent() WP 6.4.3

function get_admin_page_parent( $parent_page = '' ) {
	global $parent_file, $menu, $submenu, $pagenow, $typenow,
		$plugin_page, $_wp_real_parent_file, $_wp_menu_nopriv, $_wp_submenu_nopriv;

	if ( ! empty( $parent_page ) && 'admin.php' !== $parent_page ) {
		if ( isset( $_wp_real_parent_file[ $parent_page ] ) ) {
			$parent_page = $_wp_real_parent_file[ $parent_page ];
		}

		return $parent_page;
	}

	if ( 'admin.php' === $pagenow && isset( $plugin_page ) ) {
		foreach ( (array) $menu as $parent_menu ) {
			if ( $parent_menu[2] === $plugin_page ) {
				$parent_file = $plugin_page;

				if ( isset( $_wp_real_parent_file[ $parent_file ] ) ) {
					$parent_file = $_wp_real_parent_file[ $parent_file ];
				}

				return $parent_file;
			}
		}
		if ( isset( $_wp_menu_nopriv[ $plugin_page ] ) ) {
			$parent_file = $plugin_page;

			if ( isset( $_wp_real_parent_file[ $parent_file ] ) ) {
					$parent_file = $_wp_real_parent_file[ $parent_file ];
			}

			return $parent_file;
		}
	}

	if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[ $pagenow ][ $plugin_page ] ) ) {
		$parent_file = $pagenow;

		if ( isset( $_wp_real_parent_file[ $parent_file ] ) ) {
			$parent_file = $_wp_real_parent_file[ $parent_file ];
		}

		return $parent_file;
	}

	foreach ( array_keys( (array) $submenu ) as $parent_page ) {
		foreach ( $submenu[ $parent_page ] as $submenu_array ) {
			if ( isset( $_wp_real_parent_file[ $parent_page ] ) ) {
				$parent_page = $_wp_real_parent_file[ $parent_page ];
			}

			if ( ! empty( $typenow ) && "$pagenow?post_type=$typenow" === $submenu_array[2] ) {
				$parent_file = $parent_page;
				return $parent_page;
			} elseif ( empty( $typenow ) && $pagenow === $submenu_array[2]
				&& ( empty( $parent_file ) || ! str_contains( $parent_file, '?' ) )
			) {
				$parent_file = $parent_page;
				return $parent_page;
			} elseif ( isset( $plugin_page ) && $plugin_page === $submenu_array[2] ) {
				$parent_file = $parent_page;
				return $parent_page;
			}
		}
	}

	if ( empty( $parent_file ) ) {
		$parent_file = '';
	}
	return '';
}