Afișarea Taxonomiei Personalizate în Meniul Personalizat
Am un meniu personalizat folosind add_menu_page
:
add_menu_page('Meniul meu' , 'Un text', 'read', 'nwcm');
Sub acesta, afișez un element de meniu pentru tipul de postare personalizat;
// Creează tipul de postare personalizat pentru știri
register_post_type('nwcm_news', array(
'labels' => array(
'name' => __('Știri pentru clienți', NWCM_TEXT_DOMAIN) ,
'singular_name' => __('Știre', NWCM_TEXT_DOMAIN)
) ,
'public' => true,
'has_archive' => true,
'public' => true,
'show_ui' => true,
'show_in_menu' => 'nwcm',
'taxonomies' => array(
'nwcm_news_category'
) ,
));
Apoi adaug o taxonomie personalizată conectată la acel tip de postare "nwcm_news":
// înregistrează taxonomia pentru știri
register_taxonomy('nwcm_news_category', 'nwcm_news', array(
'label' => __('Categorii știri') ,
'menu_name' => __('Categorii știri') ,
'rewrite' => array(
'slug' => 'nwcm_news_category'
) ,
'hierarchical' => true
));
Meniul părinte și tipul de postare personalizat se afișează corect... dar, meniul taxonomiei nu apare :(
Cum pot rezolva asta? Am verificat această soluție dar răspunsului îi lipsește exemplul complet de cod..
Aveți un cod haotic.
Am reformatat codul dumneavoastră într-un cod care funcționează efectiv.
Următoarea soluție vă permite să dați meniului tipului de postare personalizat un nume la alegere. Doar schimbați eticheta "menu_name".
TIPUL DE POSTARE
// Creează tipul de postare personalizat pentru știri
register_post_type('nwcm_news', array(
'labels' => array(
'name' => __('Știri pentru clienți', 'NWCM'),
'singular_name' => __('Știre', 'NWCM'),
'menu_name' => __('NWCM', 'NWCM'),
'all_items' => __('Vezi articole', 'NWCM'),
),
'public' => true,
'has_archive' => true,
'show_ui' => true,
'show_in_menu' => true,
'taxonomies' => array(
'nwcm_news_category'
)
));
TAXONOMIE
// Înregistrează taxonomia pentru știri
register_taxonomy('nwcm_news_category', 'nwcm_news', array(
'label' => 'Categorii de știri',
'labels' => array(
'menu_name' => __('Categorii de știri', 'NWCM')
),
'rewrite' => array(
'slug' => 'nwcm-news-category'
),
'hierarchical' => true
));
Nu sunt 100% sigur dacă doriți să aveți propriul meniu de administrare personalizat pentru a adăuga elementele dumneavoastră sau dacă pur și simplu doriți să schimbați numele meniului tipului de postare personalizat.
Am adăugat menu_name
cu valoarea "NWCM" în labels
pentru tipul de postare personalizat.
Vă recomand să citiți și să înțelegeți pe deplin parametrii și argumentele pentru înregistrarea tipurilor de postare personalizate și a taxonomiilor.
ACTUALIZARE: 09/05/2014
Dacă doriți să adăugați complet propriul meniu de administrare personalizat și să integrați Tipuri de Postare Personalizate, Taxonomii Personalizate și orice alte pagini de administrare personalizate... Următoarea soluție funcționează. Rețineți că este doar un punct de plecare și nu trebuie să o faceți exact așa 100%. Este doar un exemplu... Vă recomand să o modificați, astfel încât să fie ușor de înțeles și de întreținut de către dumneavoastră sau de către dezvoltator.
Conectați-vă la init
pentru a înregistra Tipuri de Postare Personalizate și Taxonomii Personalizate.
if ( ! function_exists( 'mbe_init' ) ) {
function mbe_init() {
# Creează tipul de postare personalizat pentru știri
register_post_type( 'nwcm_news', array(
'labels' => array(
'name' => __( 'Știri pentru clienți', 'NWCM' ),
'singular_name' => __( 'Știre', 'NWCM' ),
),
'public' => true,
'has_archive' => true,
'show_ui' => true,
'show_in_menu' => false,// Adăugare manuală la meniul personalizat
'taxonomies' => array(
'nwcm_news_category'
)
) );
# Creează taxonomia personalizată pentru categorii de știri
register_taxonomy( 'nwcm_news_category', 'nwcm_news', array(
'label' => 'Categorii de știri',
'labels' => array(
'menu_name' => __( 'Categorii de știri', 'NWCM' )
),
'rewrite' => array(
'slug' => 'nwcm-news-category'
),
'hierarchical' => true
) );
}
add_action( 'init', 'mbe_init' );
}
Conectați-vă la admin_menu
pentru a crea un meniu de administrare personalizat și pentru a adăuga Pagini de Administrare Submeniu, Pagini de Tip de Postare Personalizată și Pagini de Taxonomie Personalizată la meniul de administrare personalizat.
if ( ! function_exists( 'mbe_add_admin_menu' ) && ! function_exists( 'mbe_display_admin_page' ) ) {
function mbe_add_admin_menus() {
# Setări pentru meniul de administrare personalizat
$page_title = 'Știri pentru clienți';
$menu_title = 'NWCM';
$capability = 'post';
$menu_slug = 'nwcm';
$function = 'mbe_display_admin_page';// Funcția callback care afișează conținutul paginii.
$icon_url = 'dashicons-admin-page';
$position = 0;
# Adaugă meniul de administrare personalizat
add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );
$submenu_pages = array(
# Evită pagini duplicate. Adaugă o pagină submeniu cu același slug ca și părintele.
array(
'parent_slug' => 'nwcm',
'page_title' => 'Rezumat știri',
'menu_title' => 'Rezumat',
'capability' => 'read',
'menu_slug' => 'nwcm',
'function' => 'mbe_display_admin_page',// Folosește aceeași funcție callback ca meniul părinte.
),
# Tip Postare :: Vezi toate postările
array(
'parent_slug' => 'nwcm',
'page_title' => '',
'menu_title' => 'Vezi știri',
'capability' => '',
'menu_slug' => 'edit.php?post_type=nwcm_news',
'function' => null,// Nu necesită o funcție callback.
),
# Tip Postare :: Adaugă postare nouă
array(
'parent_slug' => 'nwcm',
'page_title' => '',
'menu_title' => 'Adaugă știre',
'capability' => '',
'menu_slug' => 'post-new.php?post_type=nwcm_news',
'function' => null,// Nu necesită o funcție callback.
),
# Taxonomie :: Gestionează categorii de știri
array(
'parent_slug' => 'nwcm',
'page_title' => '',
'menu_title' => 'Categorii știri',
'capability' => '',
'menu_slug' => 'edit-tags.php?taxonomy=nwcm_news_category&post_type=nwcm_news',
'function' => null,// Nu necesită o funcție callback.
),
);
# Adaugă fiecare element submeniu la meniul de administrare personalizat.
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 );
/* Dacă adăugați orice pagini submeniu personalizate care nu sunt un Tip de Postare Personalizat sau o Taxonomie Personalizată, va trebui
* să creați o funcție callback pentru fiecare dintre elementele submeniu personalizate create mai sus.
*/
# Pagină de Administrare Implicită pentru Meniul de Administrare Personalizat
function mbe_display_admin_page() {
# Afișează conținutul paginii de administrare personalizată din meniul de administrare nou adăugat.
echo '<div class="wrap">' . PHP_EOL;
echo '<h2>Titlul Paginii Mele de Administrare Personalizată</h2>' . PHP_EOL;
echo '<p>Aceasta este pagina de administrare personalizată creată din meniul de administrare personalizat.</p>' . PHP_EOL;
echo '</div><!-- end .wrap -->' . PHP_EOL;
echo '<div class="clear"></div>' . PHP_EOL;
}
}
Conectați-vă la parent_file
pentru a evidenția corect elementele submeniului Tipului de Postare Personalizată și Taxonomiei Personalizate cu meniul/pagina părinte personalizată.
if ( ! function_exists( 'mbe_set_current_menu' ) ) {
function mbe_set_current_menu( $parent_file ) {
global $submenu_file, $current_screen, $pagenow;
# Setează submeniul ca activ/curent când ești oriunde în Tipul de Postare Personalizată (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' );
}
Dacă aveți nevoie de clarificări despre cum funcționează oricare dintre acestea, citiți următoarele pagini de la început până la sfârșit.
- Adăugarea Meniurilor de Administrare Părinte Personalizate
- Adăugarea Meniurilor de Administrare Copil Personalizate
- Roluri și Capabilități în WordPress
- Înregistrarea Tipurilor de Postare Personalizate
- Înregistrarea Taxonomiilor Personalizate
- API-ul de Plugin WordPress :: Referință de Acțiuni
- API-ul de Plugin WordPress :: Referință de Acțiuni ::
init
- API-ul de Plugin WordPress :: Referință de Acțiuni ::
admin_menu
- API-ul de Plugin WordPress :: Referință de Filtre
- Lista tuturor Hook-urilor WordPress (inclusiv acțiuni și filtre)

Din păcate, nu este ceea ce am nevoie :( Am verificat deja codex-ul și nu menționează cazul meu; Adăugarea unui meniu de taxonomie personalizat la un meniu creat cu "add_menu_page". Exemplul pe care l-ai oferit mai sus nu utilizează "add_menu_page", ci doar creează un nou meniu de nivel superior.. Acesta este motivul pentru care am folosit 'show_in_menu' => 'nwcm'
; Am nevoie ca tipul meu de postare personalizată + taxonomia asociată să apară sub meniul creat folosind add_menu_page
.. Este puțin complex și nu sunt sigur dacă este posibil să realizez asta.

@numediaweb Am încercat mult timp să transmit un șir de caractere ca argument show_in_menu
pentru register_post_type();
precum admin.php?page=nwcm
... Dar pur și simplu nu a funcționat. Cu toate acestea, cu soluția mea, permite un pic mai multă flexibilitate și libertate în dezvoltarea administrației tale WordPress. Poți combina pagini de administrare personalizate, pagini de Tipuri de Postare personalizate și pagini de Taxonomii personalizate. Verifică ediția răspunsului meu. :)

Mulțumesc Michael pentru timpul acordat răspunsului :) Ei bine, deși soluția pe care ai oferit-o va funcționa, are un dezavantaj; pierzi "legătura" sau conexiunea WordPress între tipul de postare personalizată și meniul generat. Aceasta înseamnă că atunci când dai click, de exemplu, pe "Adaugă Știre" te va duce la pagina corectă, dar meniul din stânga nu va fi evidențiat pentru că WordPress nu cunoaște conexiunea dintre tipul de postare personalizată "nwcm_news" și elementul "submenu_page".. Cred că ceea ce încerc să realizez este imposibil.. voi schimba abordarea! mulțumesc

@numediaweb Cealaltă opțiune pe care o ai este să înregistrezi tipul tău personalizat de postare (Custom Post Type) și taxonomia personalizată. Atașându-le pe ambele împreună sub același meniu în mod automat. Apoi, poți adăuga și personaliza pagini de administrare ca elemente de submeniu sub meniul tipului tău personalizat de postare. Deci, practic, operând cu o logică inversă față de ceea ce dorești să faci. Asta ar permite elementelor tale de submeniu să fie evidențiate corect.

@numediaweb Am adăugat o soluție pentru evidențierea corectă a elementelor tale de submeniu pentru tipul personalizat de postare (Custom Post Type) și taxonomia personalizată, împreună cu pagina/meniul tău personalizat de administrare părinte.

Iată cum am realizat acest lucru: În interiorul acțiunii admin_menu, am adăugat un element de submeniu la elementul de meniu părinte ('nwcm') cu parametrul menu_slug setat la URL-ul paginii de editare a taxonomiei.
add_submenu_page('nwcm', 'Categorii de știri', 'Categorii de știri', 'edit_posts', 'edit-tags.php?taxonomy=nwcm_news&post_type=nwcm_news',false );

Foarte ilustrativ că poți folosi variabila $menu_slug
pentru a indica oriunde dorești. M-am înregistrat aici doar pentru a putea să-ți votez răspunsul.

Perfect! Exact ce căutam! Singurul dezavantaj este că nu menține acel submeniu extins când ești pe acea pagină. Nu e o problemă mare în cazul meu.

Acesta este cel care funcționează! Doar o observație: atunci când înregistrezi taxonomia, de obicei folosești hook-ul 'init', dar pentru a edita funcția add_submenu_page ar trebui să folosești hook-ul 'admin_menu' - ceva de genul add_action('admin_menu', function(){ add_submenu_page() } );

Există filtru parent_file care poate fi folosit pentru a rezolva problema cu expandarea meniului.
