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

28

Je développe actuellement un plugin wordpress qui utilise deux types de messages personnalisés. Ce que je veux savoir ici: est-il possible d'ajouter un menu de type de message personnalisé en tant que sous-menu d'un autre type de message personnalisé?

Ari
la source

Réponses:

59

Oui. Lorsque vous enregistrez votre type de publication, vous devez définir show_in_menula page sur laquelle vous souhaitez qu'il s'affiche.

Ajout d'un type de publication personnalisé en tant que sous-menu de publications

Ici, nous définissons le type de publication "films" à inclure dans le sous-menu sous Publications.

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 pour le type de publication personnalisé, elle devra également être ajoutée à la page.

Dans add_submenu_page()le premier argument se trouve 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 de publication personnalisé en tant que sous-menu d'un autre type de publication 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 ainsi que les noms de page.

Pour ajouter les films CPT et son genre de taxonomie sous le type de publication Divertissement, ajustez le code comme ceci.

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'); 
}
épilektric
la source
2
Salut merci. Ça marche. Mais le sous-menu cpt a perdu son sous-menu.
Ari
J'ai mis à jour ma réponse avec un moyen d'inclure les taxonomies.
epilektric
Salut merci! J'avais trouvé le moyen de le faire! Mais peut-être que le vôtre donnera un meilleur résultat!
Ari
l' show_in_menuattribut, n'a pas fonctionné pour moi.
Francisco Corrales Morales
Désolé de répéter. Pour que le sous-menu et le menu paretn restent en surbrillance, vous devez donner à WP plus d'informations. Ok, le paramètre 'show_in_menu' rend le sous-menu actuel / mis en évidence lorsque 'my_post_type' est à l'écran. Maintenant, nous devons également ajouter une autre action, qui mettra en évidence le menu parent. Vous pouvez essayer ceci: add_filter ('parent_file', 'menu_highlight')); fonction menu_highlight ($ parent_file) {global $ plugin_page, $ post_type; if ('my_post_type' == $ post_type) {$ plugin_page = 'edit.php? post_type = my_post_type'; // le nom du hook du sous-menu} return $ parent_file; }
TomeeNS
6

Notre type de message personnalisé:

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

Ajoutez-le pour le type de publication 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);
ConConovaloff
la source
Merci! C'est utile pour moi.
NSukonny