Mostrare una Tassonomia Personalizzata all'Interno di un Menu Personalizzato

4 set 2014, 23:29:59
Visualizzazioni: 26.7K
Voti: 9

Ho un menu personalizzato che utilizza add_menu_page:

add_menu_page('Il mio menu' , 'Qualche testo', 'read', 'nwcm');

Sotto di esso, mostro un elemento di menu per un tipo di post personalizzato;

// Crea il tipo di post personalizzato news
register_post_type('nwcm_news', array(
    'labels' => array(
        'name' => __('Notizie per clienti', NWCM_TEXT_DOMAIN) ,
        'singular_name' => __('Notizia', NWCM_TEXT_DOMAIN)
    ) ,
    'public' => true,
    'has_archive' => true,
    'public' => true,
    'show_ui' => true,
    'show_in_menu' => 'nwcm',
    'taxonomies' => array(
        'nwcm_news_category'
    ) ,
));

Poi aggiungo una tassonomia personalizzata collegata a quel tipo di post "nwcm_news":

// registra la tassonomia news
register_taxonomy('nwcm_news_category', 'nwcm_news', array(
    'label' => __('Categorie notizie') ,
    'menu_name' => __('Categorie notizie') ,
    'rewrite' => array(
        'slug' => 'nwcm_news_category'
    ) ,
    'hierarchical' => true
));

Il menu principale e il tipo di post personalizzato si mostrano correttamente... ma il menu della tassonomia non viene visualizzato :(

Come posso risolvere questo problema? Ho controllato questa soluzione ma la risposta non fornisce l'esempio di codice completo..

0
Tutte le risposte alla domanda 2
6
20

Hai del codice piuttosto confuso.

Ho riformattato il tuo codice in modo che funzioni correttamente.

La seguente soluzione ti permette di dare al menu del tuo Custom Post Type un nome qualsiasi desideri. Basta modificare l'etichetta "menu_name".

TIPO DI POST

// Crea il custom post type per le news
register_post_type('nwcm_news', array(
    'labels'        => array(
        'name'          => __('News per clienti', 'NWCM'),
        'singular_name' => __('News', 'NWCM'),
        'menu_name'     => __('NWCM', 'NWCM'),
        'all_items'     => __('Visualizza Articoli', 'NWCM'),
    ),
    'public'        => true,
    'has_archive'   => true,
    'show_ui'       => true,
    'show_in_menu'  => true,
    'taxonomies'    => array(
        'nwcm_news_category'
    )
));

TASSONOMIA

// Registra la tassonomia per le news
register_taxonomy('nwcm_news_category', 'nwcm_news', array(
    'label'         => 'Categorie News',
    'labels'        => array(
        'menu_name' => __('Categorie News', 'NWCM')
    ),
    'rewrite'       => array(
        'slug' => 'nwcm-news-category'
    ),
    'hierarchical'  => true
));

Non sono sicuro al 100% se vuoi creare un menu admin personalizzato per aggiungere i tuoi contenuti o se vuoi semplicemente cambiare il nome del menu del custom post type.

Ho aggiunto il menu_name con valore "NWCM" alle labels del tuo custom post type.

Ti consiglio vivamente di leggere e comprendere appieno i parametri e gli argomenti per la registrazione di custom post type e tassonomie.


MODIFICA: 09/05/2014

Se volessi aggiungere completamente un tuo menu admin personalizzato, e includere i tuoi Custom Post Type, Custom Taxonomies e qualsiasi altra pagina admin personalizzata... La seguente soluzione funziona. Nota che è solo un punto di partenza e non devi seguirlo alla lettera. È solo un esempio... Ti consiglio di modificarlo in modo che sia comprensibile e gestibile da te o dal tuo sviluppatore.

Agganciati a init e registra i Custom Post Types e le Custom Taxonomies.

if ( ! function_exists( 'mbe_init' ) ) {

    function mbe_init() {

        # Crea il custom post type per le news
        register_post_type( 'nwcm_news', array(
            'labels'       => array(
                'name'          => __( 'News per clienti', 'NWCM' ),
                'singular_name' => __( 'News', 'NWCM' ),
            ),
            'public'       => true,
            'has_archive'  => true,
            'show_ui'      => true,
            'show_in_menu' => false,// aggiungeremo manualmente al menu personalizzato
            'taxonomies'   => array(
                'nwcm_news_category'
            )
        ) );

        # Crea la tassonomia personalizzata per le categorie news
        register_taxonomy( 'nwcm_news_category', 'nwcm_news', array(
            'label'        => 'Categorie News',
            'labels'       => array(
                'menu_name' => __( 'Categorie News', 'NWCM' )
            ),
            'rewrite'      => array(
                'slug' => 'nwcm-news-category'
            ),
            'hierarchical' => true
        ) );

    }

    add_action( 'init', 'mbe_init' );

}

Agganciati a admin_menu per creare un menu admin parent personalizzato, e aggiungi pagine admin di sottomenu personalizzate, pagine di Custom Post Type e pagine di Custom Taxonomy tutte al menu admin parent personalizzato.

if ( ! function_exists( 'mbe_add_admin_menu' ) && ! function_exists( 'mbe_display_admin_page' ) ) {

    function mbe_add_admin_menus() {

        # Impostazioni per il menu admin personalizzato
        $page_title = 'News per clienti';
        $menu_title = 'NWCM';
        $capability = 'post';
        $menu_slug  = 'nwcm';
        $function   = 'mbe_display_admin_page';// Funzione di callback che mostra il contenuto della pagina.
        $icon_url   = 'dashicons-admin-page';
        $position   = 0;

        # Aggiungi il menu admin personalizzato
        add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );

        $submenu_pages = array(

            # Evita pagine duplicate. Aggiungi una pagina di sottomenu con lo stesso slug del parent.
            array(
                'parent_slug' => 'nwcm',
                'page_title'  => 'Riepilogo News',
                'menu_title'  => 'Riepilogo',
                'capability'  => 'read',
                'menu_slug'   => 'nwcm',
                'function'    => 'mbe_display_admin_page',// Usa la stessa funzione di callback del menu parent.
            ),

            # Post Type :: Visualizza tutti i post
            array(
                'parent_slug' => 'nwcm',
                'page_title'  => '',
                'menu_title'  => 'Visualizza News',
                'capability'  => '',
                'menu_slug'   => 'edit.php?post_type=nwcm_news',
                'function'    => null,// Non serve una funzione di callback.
            ),

            # Post Type :: Aggiungi nuovo post
            array(
                'parent_slug' => 'nwcm',
                'page_title'  => '',
                'menu_title'  => 'Aggiungi News',
                'capability'  => '',
                'menu_slug'   => 'post-new.php?post_type=nwcm_news',
                'function'    => null,// Non serve una funzione di callback.
            ),

            # Taxonomy :: Gestisci categorie news
            array(
                'parent_slug' => 'nwcm',
                'page_title'  => '',
                'menu_title'  => 'Categorie News',
                'capability'  => '',
                'menu_slug'   => 'edit-tags.php?taxonomy=nwcm_news_category&post_type=nwcm_news',
                'function'    => null,// Non serve una funzione di callback.
            ),

        );

        # Aggiungi ogni elemento del sottomenu al menu admin personalizzato.
        foreach ( $submenu_pages as $submenu ) {

            add_submenu_page(
                $submenu['parent_slug'],
                $submenu['page_title'],
                $submenu['menu_title'],
                $submenu['capability'],
                $submenu['menu_slug'],
                $submenu['function']
            );

        }

    }

    add_action( 'admin_menu', 'mbe_add_admin_menus', 1 );

    /* Se aggiungi pagine di sottomenu personalizzate extra che non sono Custom Post Type o Custom Taxonomy, dovrai
     * creare una funzione di callback per ognuna delle voci di sottomenu personalizzate create sopra.
     */

    # Pagina Admin di default per il Menu Admin Personalizzato
    function mbe_display_admin_page() {

        # Mostra il contenuto della pagina admin personalizzata dal nuovo menu admin personalizzato.
        echo '<div class="wrap">' . PHP_EOL;
        echo '<h2>Titolo della mia pagina admin personalizzata</h2>' . PHP_EOL;
        echo '<p>Questa è la pagina admin personalizzata creata dal menu admin personalizzato.</p>' . PHP_EOL;
        echo '</div><!-- end .wrap -->' . PHP_EOL;
        echo '<div class="clear"></div>' . PHP_EOL;

    }

}

Agganciati a parent_file per evidenziare correttamente le voci di sottomenu dei tuoi Custom Post Type e Custom Taxonomy con la tua pagina/menu parent personalizzato.

if ( ! function_exists( 'mbe_set_current_menu' ) ) {

    function mbe_set_current_menu( $parent_file ) {
        global $submenu_file, $current_screen, $pagenow;

        # Imposta il sottomenu come attivo/corrente mentre sei nel tuo Custom Post Type (nwcm_news)
        if ( $current_screen->post_type == 'nwcm_news' ) {

            if ( $pagenow == 'post.php' ) {
                $submenu_file = 'edit.php?post_type=' . $current_screen->post_type;
            }

            if ( $pagenow == 'edit-tags.php' ) {
                $submenu_file = 'edit-tags.php?taxonomy=nwcm_news_category&post_type=' . $current_screen->post_type;
            }

            $parent_file = 'nwcm';

        }

        return $parent_file;

    }

    add_filter( 'parent_file', 'mbe_set_current_menu' );

}

Se hai bisogno di chiarimenti su come funziona tutto questo, leggi le seguenti pagine dall'inizio alla fine.

  1. Aggiungere Menu Admin Parent Personalizzati
  2. Aggiungere Menu Admin Child Personalizzati
  3. Ruoli e Capacità in WordPress
  4. Registrare Custom Post Types
  5. Registrare Custom Taxonomies
  6. WordPress Plugin API :: Riferimento Azioni
  7. WordPress Plugin API :: Riferimento Azioni :: init
  8. WordPress Plugin API :: Riferimento Azioni :: admin_menu
  9. WordPress Plugin API :: Riferimento Filtri
  10. Lista di tutti gli Hook WordPress (inclusi azioni e filtri)
5 set 2014 01:21:00
Commenti

Sfortunatamente non è ciò di cui ho bisogno :( Ho già controllato il codex e non parla del mio caso; Aggiungere un menu di tassonomia personalizzato a un menu creato con "add_menu_page". L'esempio che hai fornito sopra non utilizza "add_menu_page" ma crea semplicemente un nuovo menu di primo livello.. Questo è il motivo per cui ho usato 'show_in_menu' => 'nwcm'; Ho bisogno che il mio custom post type + tassonomia associata siano visualizzati sotto il menu creato usando add_menu_page .. È un po' complesso e non sono sicuro che sia possibile ottenere questo risultato.

numediaweb numediaweb
5 set 2014 13:49:48

@numediaweb Ho provato a lungo a passare una stringa all'argomento show_in_menu per register_post_type(); come admin.php?page=nwcm ... Ma semplicemente non funzionava. Tuttavia, con la mia soluzione, si ottiene un po' più di flessibilità e libertà nello sviluppo dell'amministrazione di WordPress. Puoi mescolare pagine di amministrazione personalizzate, pagine di Post Type personalizzati e pagine di Tassonomia personalizzata. Dai un'occhiata alla modifica alla mia risposta. :)

Michael Ecklund Michael Ecklund
5 set 2014 19:36:46

Grazie Michael per il tempo dedicato alla risposta :) Beh, sebbene la soluzione che hai fornito funzioni, ha uno svantaggio; perdi il "gancio" di WordPress o il collegamento tra il custom post type e il menu generato. Ciò significa che quando clicchi ad esempio su "Aggiungi News" verrai portato alla pagina corretta ma il menu a sinistra non sarà evidenziato perché WordPress non conosce la connessione tra il custom post type "nwcm_news" e la voce "submenu_page".. Penso che ciò che sto cercando di ottenere sia impossibile.. cambierò approccio! grazie

numediaweb numediaweb
5 set 2014 22:05:43

@numediaweb L'altra opzione che hai è registrare il tuo Custom Post Type e la tua tassonomia personalizzata. Associandoli automaticamente sotto lo stesso menu. Poi, puoi aggiungere e personalizzare pagine di amministrazione come voci di sottomenu sotto il menu del tuo Custom Post Type. Quindi, fondamentalmente, operando con una logica inversa rispetto a ciò che desideri fare. Questo permetterebbe alle voci del tuo sottomenu di evidenziarsi correttamente.

Michael Ecklund Michael Ecklund
5 set 2014 23:02:13

@numediaweb Ho aggiunto una correzione per evidenziare correttamente le voci del sottomenu del tuo Custom Post Type e della tassonomia personalizzata con la tua pagina/menu genitore personalizzato di amministrazione.

Michael Ecklund Michael Ecklund
5 set 2014 23:21:11

Spiegazione piuttosto solida. Parent_file necessita di alcuni aggiustamenti ma contiene praticamente tutto ciò che serve per risolvere questo problema.

GDY GDY
9 mag 2022 13:08:16
Mostra i restanti 1 commenti
5
11

Ecco come ho realizzato questo: all'interno dell'azione admin_menu, ho aggiunto una voce di sottomenu al menu principale ('nwcm') con il parametro menu_slug impostato sull'URL della pagina di modifica della tassonomia.

add_submenu_page('nwcm', 'Categorie news', 'Categorie news', 'edit_posts', 'edit-tags.php?taxonomy=nwcm_news&post_type=nwcm_news',false );
28 lug 2015 03:02:48
Commenti

Risposta molto precisa alla domanda

richard muvirimi richard muvirimi
14 apr 2020 16:15:12

Molto illustrativo che puoi usare la variabile $menu_slug per puntare dove vuoi. Mi sono registrato qui solo per poter votare la tua risposta.

maganap maganap
27 apr 2020 17:43:34

Fantastico! Esattamente quello che stavo cercando! L'unico svantaggio è che non mantiene quel sottomenu espanso quando sei su quella pagina. Non è un grosso problema nel mio caso.

Codesmith Codesmith
9 dic 2020 01:12:15

Questo è quello che funziona! Solo una nota: quando registri la tua tassonomia normalmente agganci a 'init', per modificare la funzione add_submenu_page dovresti agganciare alla funzione 'admin_menu' - qualcosa come add_action('admin_menu', function(){ add_submenu_page() } );

PattyOK PattyOK
25 ago 2021 20:54:04

C'è il filtro parent_file che può essere utilizzato per risolvere il problema dell'espansione del menu.

wrwrwr wrwrwr
2 mag 2023 10:51:07