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


28

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

Ответы:


59

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

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

Здесь мы устанавливаем тип записи «фильмы», который будет включен в подменю «Сообщения».

register_post_type( 'movies',
    array(
            'labels' => array(
                    'name' => __( 'Movies' ),
                    'singular_name' => __( 'Movie' )
            ),
    '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', 'Genre', 'Genre', 'manage_options', 'edit-tags.php?taxonomy=genre'); 
}  

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

Чтобы добавить страницы в другой пользовательский тип записи, включите параметр строки запроса типа записи вместе с именами страниц.

Чтобы добавить фильмы CPT и жанр таксономии под типом «Развлечения», настройте код следующим образом.

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' => __( 'Movies' ),
                    'singular_name' => __( 'Movie' )
            ),
    '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', 'Genre', 'Genre', 'manage_options', 'edit-tags.php?taxonomy=genre&post_type=entertainment'); 
}

2
Привет спасибо. Оно работает. Но подменю cpt потеряло свое подменю.
Ари

Я обновил свой ответ, добавив в него таксономии.
эпилектрическое

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

show_in_menuатрибут, не работал для меня.
Франциско Корралес Моралес

Извините за повторение. Чтобы подменю и меню Paretn оставались выделенными, вам нужно предоставить WP дополнительную информацию. Хорошо, параметр '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

6

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

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

Добавьте его для существующего Пользовательского Типа Сообщения (например, «продукт»):

$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);

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

// Create plugin menu
add_menu_page('MyPlugin', 'MyPlugin', 'manage_options', 'myPluginSlug', 'callback_render_plugin_menu');

// Create submenu with href to view 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);

Благодарность! Это полезно для меня.
Н.С. Суконный
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.