Получение Родительской Страницы Административной Панели (GET_ADMIN_PAGE_PARENT)

# Получение Родительской Страницы Административной Панели (GET_ADMIN_PAGE_PARENT)

Функция get_admin_page_parent() используется для определения родительского файла текущей страницы в административной панели WordPress. Это удобно, если вам нужно узнать, к какому разделу меню относится открытая в данный момент страница.

### Основные параметры функции

- **Использование**: 
  ```php
  get_admin_page_parent( $parent_page );
  • Параметр:
    • $parent_page (строка): Идентификатор родительского меню (или имя файла стандартной страницы администратора WordPress).
    • По умолчанию: пустая строка.

Возвращаемое значение

Функция возвращает строку с именем родительского файла текущей страницы административной панели.

Примеры использования

Пример 1: Отображение имени родительского файла для стандартного элемента меню

В этом примере мы добавляем пункт подменю в раздел «Инструменты» и выводим родительский файл этой страницы.

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
}

Пример 2: Отображение имени родительского файла в CF7 (Контактная Форма 7)

В этом примере мы добавляем подменю для главного меню плагина 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
}

Примечания

  • Переменные, которые могут быть полезны:
    • $parent_file: хранилище для имени родительского файла.
    • $menu: массив всех пунктов меню.
    • $submenu: массив всех подменю.
    • $pagenow: имя файла текущего экрана.
    • $typenow: тип записи текущего экрана.

Изменения в функции

Функция get_admin_page_parent() была введена в версии WordPress 1.5.0. Она продолжает использоваться и в современных версиях WordPress.

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 '';
}

Теперь вы можете использовать функцию get_admin_page_parent() в своих проектах и легко находить родительские страницы админки WordPress.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *