Чи можливо додати спеціальне меню типу "Пост" як інше підменю "Тип повідомлення"


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 та його жанр таксономії під типом публікації 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' => __( '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 втрачено підменю.
Арі

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

Привіт дякую! Я знайшов спосіб це зробити! Але, можливо, ваш дасть кращий результат!
Арі

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

Вибачте за повторення. Для того, щоб підменю та меню меню було підсвіченим, вам потрібно надати WP трохи більше інформації. Гаразд, параметр 'show_in_menu' робить підменю поточним / виділеним, коли на екрані 'my_post_type'. Тепер нам також потрібно додати ще одну дію, яка висвітлить батьківське меню. Ви можете спробувати це: add_filter ('parent_file', 'menu_highlight')); функціональне меню_highlight ($ parent_file) {глобальний $ plugin_page, $ post_type; if ('my_post_type' == $ post_type) {$ plugin_page = 'edit.php? post_type = my_post_type'; // ім'я гачка підменю} повернути $ 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);

Спасибі! Це мені корисно.
NSukonny
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.