É possível adicionar um menu personalizado de tipo de postagem como outro submenu personalizado de tipo de postagem

28

Atualmente, estou desenvolvendo um plugin wordpress que usa dois tipos de postagem personalizados. O que eu quero saber aqui: é possível adicionar um menu de tipo de postagem personalizado como submenu de outro tipo de postagem personalizado?

Ari
fonte

Respostas:

59

Sim. Ao registrar seu tipo de postagem, você precisa definir show_in_menua página em que deseja que ela seja exibida.

Adicionando um tipo de postagem personalizado como um submenu de Postagens

Aqui, definimos o tipo de postagem "filmes" para ser incluído no submenu em Postagens.

register_post_type( 'movies',
    array(
            'labels' => array(
                    'name' => __( 'Movies' ),
                    'singular_name' => __( 'Movie' )
            ),
    'public' => true,
    'has_archive' => true,
    'show_in_menu' => 'edit.php'
    )
);

Se você tiver uma taxonomia registrada no tipo de postagem personalizada, ela também precisará ser adicionada à página.

No add_submenu_page()primeiro argumento está a página para atribuí-lo e o último é a lesma do menu.

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'); 
}  

Adicionando um tipo de postagem personalizado como um submenu de outro tipo de postagem personalizada

Para adicionar as páginas a outro tipo de postagem personalizado, inclua o parâmetro de sequência de consultas do tipo de postagem junto com os nomes das páginas.

Para adicionar os filmes CPT e seu gênero de taxonomia no tipo de postagem Entretenimento, ajuste o código dessa maneira.

edit.php torna-se edit.php?post_type=entertainment

edit-tags.php torna-se 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'); 
}
epilético
fonte
2
Oi obrigado Funciona. Mas o submenu cpt perdeu seu submenu.
Ari
Atualizei minha resposta com uma maneira de incluir taxonomias.
epilektric
Oi obrigado! Eu tinha encontrado o caminho para fazê-lo! Mas pode ser seu, vai dar um resultado melhor!
Ari #
o show_in_menuatributo, não funcionou para mim.
Francisco Corrales Morales
Desculpe por repetir. Para que o menu submenu e paretn permaneça destacado, é necessário fornecer mais informações ao WP. Ok, o parâmetro 'show_in_menu' torna o submenu atual / realçado quando 'my_post_type' estiver na tela. Agora, precisamos também adicionar outra ação, que realce o menu principal. Você pode tentar o seguinte: add_filter ('parent_file', 'menu_highlight')); função menu_highlight ($ parent_file) {global $ plugin_page, $ post_type; if ('my_post_type' == $ post_type) {$ plugin_page = 'edit.php? post_type = my_post_type'; // nome do gancho do submenu} return $ parent_file; }
TomeeNS
6

Nosso tipo de postagem personalizada:

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

Adicione-o ao tipo de postagem personalizado existente ("produto", por exemplo):

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

Ou adicione nosso menu de plug-in personalizado:

// 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);
ConConovaloff
fonte
Obrigado! É útil para mim.
NSukonny 27/11