Возможно ли добавить меню произвольного типа записи как подменю другого произвольного типа записи

18 авг. 2013 г., 20:00:11
Просмотры: 68.7K
Голосов: 46

В настоящее время я разрабатываю плагин WordPress, который использует два произвольных типа записей. Я хочу узнать: возможно ли добавить меню одного произвольного типа записи как подменю другого произвольного типа записи?

0
Все ответы на вопрос 3
6
94

Да. При регистрации вашего типа записи необходимо установить параметр show_in_menu для страницы, на которой вы хотите его отображать.

Добавление пользовательского типа записи в качестве подменю для "Записей"

Здесь мы устанавливаем тип записи "movies" для включения в подменю под "Записи".

register_post_type( 'movies',
    array(
            'labels' => array(
                    'name' => __( 'Фильмы' ),
                    'singular_name' => __( 'Фильм' )
            ),
    'public' => true,
    'has_archive' => true,
    'show_in_menu' => 'edit.php'
    )
);

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

В функции add_submenu_page() первый аргумент — это страница, к которой нужно прикрепить подменю, а последний — ярлык меню.

add_action('admin_menu', 'my_admin_menu'); 
function my_admin_menu() { 
    add_submenu_page('edit.php', 'Жанры', 'Жанры', 'manage_options', 'edit-tags.php?taxonomy=genre'); 
}  

Добавление пользовательского типа записи в качестве подменю другого пользовательского типа записи

Для добавления страниц к другому пользовательскому типу записи укажите параметр строки запроса типа записи вместе с именами страниц.

Чтобы добавить тип записи Movies и его таксономию Genre под тип записи Entertainment, измените код следующим образом.

edit.php становится edit.php?post_type=entertainment

edit-tags.php становится edit-tags.php?taxonomy=genre&post_type=entertainment

register_post_type( 'movies',
    array(
            'labels' => array(
                    'name' => __( 'Фильмы' ),
                    'singular_name' => __( 'Фильм' )
            ),
    'public' => true,
    'has_archive' => true,
    'show_in_menu' => 'edit.php?post_type=entertainment'
    )
);

add_action('admin_menu', 'my_admin_menu'); 
function my_admin_menu() { 
    add_submenu_page('edit.php?post_type=entertainment', 'Жанры', 'Жанры', 'manage_options', 'edit-tags.php?taxonomy=genre&post_type=entertainment'); 
}
18 авг. 2013 г. 20:29:23
Комментарии

Привет, спасибо. Это работает. Но подменю CPT потеряло свое подменю.

Ari Ari
18 авг. 2013 г. 21:00:58

Я обновил свой ответ, добавив способ включения таксономий.

epilektric epilektric
21 авг. 2013 г. 14:58:21

Привет, спасибо! Я уже нашел способ сделать это! Но возможно твой вариант даст лучший результат!

Ari Ari
21 авг. 2013 г. 15:57:53

Атрибут show_in_menu не сработал для меня.

Francisco Corrales Morales Francisco Corrales Morales
27 февр. 2015 г. 00:08:34

Извините за повторение. Чтобы подсветка подменю и родительского меню работала корректно, нужно передать WordPress дополнительную информацию. Параметр 'show_in_menu' делает подменю активным/подсвеченным, когда на экране отображается 'my_post_type'. Теперь нам нужно добавить еще одно действие, которое подсветит родительское меню. Попробуйте это: add_filter( 'parent_file', 'menu_highlight' )); function menu_highlight( $parent_file ){ global $plugin_page, $post_type; if ('my_post_type' == $post_type) { $plugin_page = 'edit.php?post_type=my_post_type'; // название хука подменю } return $parent_file; }

TomeeNS TomeeNS
26 мая 2017 г. 18:59:51

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

Krys Krys
10 сент. 2021 г. 10:44:52
Показать остальные 1 комментариев
1

Наш пользовательский тип записи:

$args['show_in_menu'] = false;
register_post_type('custom_plugin_post_type', $args);

Добавляем его к существующему пользовательскому типу записи (например, "product"):

$existing_CPT_menu = 'edit.php?post_type=product';
$link_our_new_CPT = 'edit.php?post_type=custom_plugin_post_type';
add_submenu_page($existign_CPT_menu, 'SubmenuTitle', 'SubmenuTitle', 'manage_options', $link_our_new_CPT);

Или добавляем в меню нашего плагина:

// Создаем меню плагина
add_menu_page('MyPlugin', 'MyPlugin', 'manage_options', 'myPluginSlug', 'callback_render_plugin_menu');

// Создаем подменю со ссылкой на просмотр custom_plugin_post_type
$link_our_new_CPT = 'edit.php?post_type=custom_plugin_post_type';
add_submenu_page('myPluginSlug', 'SubmenuTitle', 'SubmenuTitle', 'manage_options', $link_our_new_CPT);
14 мар. 2017 г. 13:40:13
Комментарии

Спасибо! Это полезно для меня.

NSukonny NSukonny
27 нояб. 2019 г. 13:39:35
0

Вот что сработало у меня

описание изображения

add_action('admin_menu', 'vrodos_plugin_menu');

function vrodos_plugin_menu(){
    add_menu_page( 'Страница плагина VRodos',
                   'VRodos',
                    'manage_options',
                    'vrodos-plugin',
                    'vrodos_plugin_main_page');
    
    
    add_submenu_page('vrodos-plugin',
                     'Игры',
                     'Игры',
                     'manage_options',
                     'edit.php?post_type=vrodos_game'
                     );
}

Когда я регистрирую пользовательский тип записи 'vrodos_game', я указываю

    'show_ui'               => true,
    'show_in_menu'          => false,
23 февр. 2022 г. 11:42:04