Ottenere lo slug di una voce di menu
Uso menu personalizzati e vorrei ottenere gli slug delle voci di menu. È possibile?
// Ottieni il menu di navigazione basato su $menu_name (uguale a 'theme_location' o argomento 'menu' di wp_nav_menu)
// Questo codice è basato sul codice di wp_nav_menu per ottenere l'ID del Menu dallo slug del menu
$menu_name = 'main-menu';
if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {
$menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
$menu_items = wp_get_nav_menu_items($menu->term_id);
$menu_list = '<ul id="menu-' . $menu_name . '">';
foreach ( (array) $menu_items as $key => $menu_item ) {
$title = $menu_item->title;
$url = $menu_item->url;
$menu_list .= '<li><a href="#' . $url . '">' . $title . '</a></li>';
}
$menu_list .= '</ul>';
}
echo $menu_list;
http://codex.wordpress.org/Function_Reference/wp_get_nav_menu_items
Bene, hai l'ID del post con te. Quindi puoi utilizzare questa funzione personalizzata per recuperare lo slug di qualsiasi post.
function get_the_slug( $id=null ){
if( empty($id) ):
global $post;
if( empty($post) )
return ''; // Nessuna variabile globale $post disponibile.
$id = $post->ID;
endif;
$slug = basename( get_permalink($id) );
return $slug;
}
Questo restituirà lo slug del post specificato che puoi passare come argomento. Di default ti darà lo slug dell'elemento post corrente.

Ho creato una soluzione che recupera i menu ed estrae gli slug da essi. Non sono sicuro che funzioni perfettamente con i menu personalizzati, ma almeno quando il menu utilizza post, categorie o altre possibilità offerte da WordPress, funziona.
Puoi inserire questa funzione nel tuo file functions.php e richiamarla ovunque nel tuo tema.
//Devi passare lo slug del menu come parametro alla funzione.
//Sostituisci $current_menu con lo slug del menu da cui vuoi ottenere gli slug.
function get_menu_slugs( $current_menu ) {
$slugs_menu = array();
$array_menu = wp_get_nav_menu_items( $current_menu );
foreach ( $array_menu as $m ) {
$single_slug = basename( $m->url );
$slugs_menu[] = $single_slug;
}
return $slugs_menu;
}
Questa funzione restituirà un array con l'elenco degli slug estratti dagli URL del menu.
