web-dev-qa-db-fra.com

Est-il possible d'ajouter un menu de type message personnalisé en tant que sous-menu d'un autre type message personnalisé

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é?

28
KeepMove

Oui. Lorsque vous enregistrez votre type de message, vous devez définir show_in_menu sur la page sur laquelle vous souhaitez le visualiser.

Ajout d'un type de message personnalisé en tant que sous-menu de messages

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

Ajout d'un type d'article personnalisé en tant que sous-menu d'un autre type d'article personnalisé

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

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);
5
ConConovaloff