Удалите или переместите подменю администратора в новое меню.

Вопрос или проблема

Я разрабатываю новый плагин для WordPress, который регистрирует несколько новых типов постов. У них у всех есть свое меню и подменю в админке WordPress. Как создать новое меню (как родительская категория) и переместить все элементы под него?

Установите аргумент

    'show_in_menu'  => false

при регистрации вашего поста с помощью register_post_type() приведет к игнорированию админских меню для этого типа поста, поэтому это лучшее решение для скрытия меню.

Если вы не можете получить к нему доступ, вы можете подключить функцию к admin_menu, чтобы добавить или удалить меню и подменю.

Вот пример. Мы создали тип поста ‘artist’, но не хотим, чтобы у него было админское меню. Мы хотели бы поместить его под меню ‘music’; оно будет иметь различные другие подменю.

    add_action( 'admin_menu', 'adjust_admin_menu' );

    function adjust_admin_menu(){

        $menu_slug = 'music'; //путь меню (или путь к файлу); как ID
        $post_type_artist_slug = 'artist';
        $post_type_artist = get_post_type_object($post_type_artist_slug);

        /////Удалить меню, сгенерированное register_post_type() для нашего пользовательского типа поста 'artist'.  При регистрации типа поста, установка 

        $remove_menu_slug = sprintf('edit.php?post_type=%s',$post_type_artist_slug); //путь меню (здесь, путь к файлу); как ID

        //удалить меню
        remove_menu_page( $remove_menu_slug );
        /*
        //ИЛИ удалить подменю 'добавить новый'
        remove_submenu_page( 
             $remove_menu_slug,
            sprintf('post-new.php?post_type=%s',$post_type_artist_slug) //путь подменю (здесь, путь к файлу); как ID
        );
        */
        /////Создать наше пользовательское меню

        $this->menu_page = add_menu_page( 
            __( 'Музыка', 'music-plugin' ), //название страницы - я никогда не понимал, зачем нужен этот параметр. Поставьте что угодно?
            __( 'Музыка', 'music-plugin' ), //название меню
            'manage_options', //возможности
            $menu_slug,
            array($this,'settings_page'), //эта функция выведет содержимое страницы 'Музыка'.
            'dashicons-album', // изображение будет 'plugins_url( 'myplugin/images/icon.png' )'; но для иконок ядра см. https://developer.wordpress.org/resource/dashicons 
            6
        ); 

        ////Добавить подменю

         add_submenu_page(
                $menu_slug,
                $post_type_artist->labels->name, //название страницы - я никогда не понимал, зачем нужен этот параметр. Поставьте что угодно?
                $post_type_artist->labels->name, //название подменю
                'edit_posts',
                sprintf('edit.php?post_type=%s',$post_type_artist_slug) //путь подменю (здесь, путь к файлу); как ID

         );

         add_submenu_page(
                $menu_slug,
                $post_type_artist->labels->add_new_item,
                $post_type_artist->labels->add_new_item,
                'edit_posts',
                sprintf('post-new.php?post_type=%s',$post_type_artist_slug) //путь подменю (здесь, путь к файлу); как ID

         );
    }

.

Ответ или решение

Перемещение подменю администраторов в меню WordPress

В процессе разработки нового плагина для WordPress, который регистрирует несколько новых типов записей, возникает необходимость организовать административное меню более эффективно, объединив группы записей под единой родительской категорией. В этой статье мы подробно обсудим, как создать новое меню и переместить подменю в его структуру, используя функционал WordPress.

Шаг 1: Скрытие стандартного меню

Первоначально, чтобы скрыть стандартное меню для вашего типа записи, необходимо использовать параметр show_in_menu в функции register_post_type(). Установив его значение в false, мы предотвращаем создание отдельного пункта меню для нового типа записи.

'register_post_type' => array(
    'show_in_menu' => false,
    // Остальные параметры регистрации...
);

Шаг 2: Использование хука admin_menu

Затем нужно использовать хук admin_menu для удаления уже существующего меню и добавления нового. В данном примере мы создадим меню "Музыка", в котором будет находиться подменю для типа записи "Artist".

Пример кода
add_action('admin_menu', 'adjust_admin_menu');

function adjust_admin_menu() {
    $menu_slug = 'music'; // слаг нового меню
    $post_type_artist_slug = 'artist'; // слаг типа записи "Artist"
    $post_type_artist = get_post_type_object($post_type_artist_slug);

    // Удаляем стандартное меню для типа записи "Artist"
    $remove_menu_slug = sprintf('edit.php?post_type=%s', $post_type_artist_slug);
    remove_menu_page($remove_menu_slug);

    // Создаем новое меню "Музыка"
    add_menu_page(
        __('Музыка', 'music-plugin'), // Заголовок страницы
        __('Музыка', 'music-plugin'), // Заголовок меню
        'manage_options', // возможности
        $menu_slug, 
        'music_page_content', // функция, генерирующая содержимое страницы
        'dashicons-album', // Иконка
        6
    );

    // Добавляем подменю для типа записи "Artist"
    add_submenu_page(
        $menu_slug,
        $post_type_artist->labels->name, // Заголовок подменю
        $post_type_artist->labels->name, // Название подменю
        'edit_posts', 
        sprintf('edit.php?post_type=%s', $post_type_artist_slug)
    );

    // Добавляем подменю для добавления новой записи "Artist"
    add_submenu_page(
        $menu_slug,
        $post_type_artist->labels->add_new_item, // Заголовок подменю
        $post_type_artist->labels->add_new_item, // Название подменю
        'edit_posts', 
        sprintf('post-new.php?post_type=%s', $post_type_artist_slug)
    );
}

// Функция, генерирующая содержимое страницы "Музыка"
function music_page_content() {
    echo '<h1>Добро пожаловать в раздел Музыка</h1>';
}

Объяснение кода

  1. Удаление меню: Функция remove_menu_page($remove_menu_slug) убирает стандартный пункт меню, связанный с типом записи "Artist".

  2. Создание меню: Используется функция add_menu_page() для создания нового родительского меню "Музыка". Здесь важно правильно указать параметры, такие как заголовок страницы, название меню, права доступа и функцию, которая будет генерировать контент страницы.

  3. Добавление подменю: Функции add_submenu_page() добавляют соответствующие подменю для просмотра и добавления записей типа "Artist".

Заключение

Реализация перемещения администраторских пунктов меню в WordPress — это мощный инструмент для упрощения навигации в админке, особенно при разработке плагинов с множеством типов записей. С использованием встроенных функций WordPress и правильного применения хуков, таких как admin_menu, вы сможете создать интуитивно понятную структуру меню для ваших пользователей.

Следуя приведенным рекомендациям, вы сможете оптимизировать административную панель вашего плагина, сделав её более удобной и понятной.

Оцените материал
Добавить комментарий

Капча загружается...