Как изменить позицию элемента меню типа записи (Custom Post Type) в административном меню моего плагина?

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

Я пишу плагин (впервые, так что не судите строго!), который включает пользовательский тип записей: ‘Programmes’. В административном меню я создал новую группу меню для плагина, и у меня есть пункт меню ‘Programmes’ в этой группе, наряду с некоторыми другими. Моя проблема в том, что пункт ‘Programmes’ появляется первым, тогда как я хочу, чтобы первым был ‘Dashboard’. Я пробовал изменить аргумент ‘menu_position’, но это не дало результата (предполагаю, что это применимо только к меню верхнего уровня).

Вот как мое меню отображается:

  • Hiblio
    • Programmes
    • Dashboard
    • Applications

Screenshot

А вот как я хочу, чтобы оно выглядело:

  • Hiblio
    • Dashboard
    • Programmes
    • Applications

Вот мои аргументы для пользовательского типа записей:

$args = array(
    'label'               => __( 'programmes', 'hiblio' ),
    'description'         => __( 'Programmes for application from partner organisations', 'hiblio' ),
    'labels'              => $labels,
    'supports'            => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', ),
    'taxonomies'          => array( 'programmes_categories' ),
    'hierarchical'        => true,
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => 'hiblio',
    'show_in_nav_menus'   => false,
    'show_in_admin_bar'   => false,
    'menu_position'       => 2,
    'can_export'          => true,
    'has_archive'         => true,
    'exclude_from_search' => true,
    'publicly_queryable'  => false,
    'capability_type'     => 'post'
);

Есть идеи?

Заранее спасибо,

Ash

Так как панель управления использует menu_position 2, просто используйте menu_position 1.

Таким образом:

$args = array(
    'label'               => __( 'programmes', 'hiblio' ),
    'description'         => __( 'Programmes for application from partner organisations', 'hiblio' ),
    'labels'              => $labels,
    'supports'            => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', ),
    'taxonomies'          => array( 'programmes_categories' ),
    'hierarchical'        => true,
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => 'hiblio',
    'show_in_nav_menus'   => false,
    'show_in_admin_bar'   => false,
    'menu_position'       => 1,
    'can_export'          => true,
    'has_archive'         => true,
    'exclude_from_search' => true,
    'publicly_queryable'  => false,
    'capability_type'     => 'post'
);

Информация предоставлена: Размещение меню пользовательского типа записей выше меню записей с помощью menu_position?

Удачного кодирования,

Kuchenundkakao

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

Вопрос о переносе позиций элементов меню в админке при создании плагина WordPress и добавлении кастомного типа записей (Custom Post Type, CPT) имеет важное значение для разработчиков, стремящихся оптимизировать пользовательский интерфейс. Рассмотрим, как осуществить данную задачу, ориентируясь на предоставленную информацию.

Теория

Когда вы создаете плагин для WordPress, чтобы улучшить функциональность сайта, у вас может возникнуть необходимость в добавлении новых пунктов меню для удобного доступа к функционалу. В WordPress для кастомного типа записей можно указать, где именно в административном меню он должен отображаться, с помощью аргумента menu_position. Однако, этот аргумент управляет расположением в глобальном меню, а не в групповом подменю вашего плагина.

В данном случае ваша цель — перевести пункт "Dashboard" в начало подменю "Hiblio". Для этого стандартного аргумента menu_position недостаточно, так как он работает на уровне верхнего меню, а не внутри конкретного подменю.

Пример

В вашей текущей конфигурации CPT "Programmes" добавляется в подменю "Hiblio", занимая первую позицию. Вы хотели бы, чтобы сначала шёл пункт "Dashboard". Оптимизировать порядок можно, используя несколько подходов:

  1. Добавление кастомных страниц:

    Используйте функцию add_submenu_page(), чтобы добавить пункт меню "Dashboard" первым. Функция позволяет определить порядок элементов внутри группы.

  2. Использование фильтров:

    Иногда более детальная кастомизация меню может потребовать использования фильтра menu_order. С его помощью можно изменить порядок элементов в административной панели.

Применение

Для достижения желаемого результата, выполните следующие шаги:

  1. Добавьте пункт "Dashboard" вручную до регистрации вашего CPT:

    add_action('admin_menu', 'custom_plugin_menu_order');
    
    function custom_plugin_menu_order() {
       add_menu_page(
           'Hiblio', // Заголовок страницы
           'Hiblio', // Заголовок меню
           'manage_options', // Права доступа
           'hiblio-dashboard', // Слуг идентификации
           'dashboard_function', // Функция вывода содержимого
           null, // URL иконки
           null  // Позиция в меню
       );
    
       add_submenu_page(
           'hiblio-dashboard', 
           'Dashboard', 
           'Dashboard', 
           'manage_options', 
           'hiblio-dashboard', 
           'dashboard_function'
       );
    }
  2. Поменяйте позицию CPT "Programmes" с использованием фильтра menu_order:

Измените порядок с помощью фильтрации:

   add_filter('custom_menu_order', '__return_true');
   add_filter('menu_order', 'custom_submenu_order');

   function custom_submenu_order($menu_ord) {
       // Позиции подменю можно изменить, перестроив массив
       return array(
           'hiblio-dashboard',
           'edit.php?post_type=programmes', // Адаптируйте ссылку CPT
           'another_custom_page_slug', // Другие элементы
       );
   }

Это позволит задать порядок подменю в административной области согласно вашей логике.

Заключение

Оптимизация меню админки в WordPress для улучшения интерфейса и повышения удобства пользователей — важный аспект разработки плагинов. Используя адекватные функции и фильтры, вы можете гибко настроить выдачу пунктов меню, решая задачи по оптимизации пользовательского интерфейса. Учитывайте, что при внесении таких изменений важно тестировать их в безопасной среде и учитывать обновления ядра и других плагинов, чтобы избежать конфликтов. PigeonEnglish

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

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