Je développe actuellement un plugin wordpress qui utilise deux types de publication personnalisés. Ce que je veux savoir ici: est-il possible d'ajouter un menu de type message personnalisé en tant que sous-menu d'un autre type de message personnalisé?
Oui. Lorsque vous enregistrez votre type de message, vous devez définir show_in_menu
sur la page sur laquelle vous souhaitez le visualiser.
Ici, nous définissons le type de message "films" à inclure dans le sous-menu sous Messages.
register_post_type( 'movies',
array(
'labels' => array(
'name' => __( 'Movies' ),
'singular_name' => __( 'Movie' )
),
'public' => true,
'has_archive' => true,
'show_in_menu' => 'edit.php'
)
);
Si vous avez une taxonomie enregistrée dans le type de publication personnalisé, elle devra également être ajoutée à la page.
Dans add_submenu_page()
le premier argument est la page à laquelle l’affecter et le dernier est le slug du 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');
}
Pour ajouter les pages à un autre type de publication personnalisé, incluez le paramètre de chaîne de requête du type de publication avec les noms de page.
Pour ajouter les films CPT et son genre de taxonomie sous le type de message Divertissement, ajustez le code comme suit.
edit.php
devient edit.php?post_type=entertainment
edit-tags.php
devient 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');
}
Notre type de message personnalisé:
$args['show_in_menu'] = false;
register_post_type('custom_plugin_post_type', $args);
Ajoutez-le pour le type de message personnalisé existant ("produit" par exemple):
$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 ajoutez pour notre menu de plugin personnalisé:
// 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);