Obtener el slug del elemento del menú
Uso menús personalizados y me gustaría obtener los slugs de los elementos del menú. ¿Es posible?
// Obtener el menú de navegación basado en $menu_name (igual que 'theme_location' o el argumento 'menu' en wp_nav_menu)
// Este código está basado en el código de wp_nav_menu para obtener el ID del Menú desde el slug del menú
$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
Ya tienes el ID del post contigo. Así que puedes usar esta función personalizada para obtener el slug de cualquier post.
function get_the_slug( $id=null ){
if( empty($id) ):
global $post;
if( empty($post) )
return ''; // No hay variable global $post disponible.
$id = $post->ID;
endif;
$slug = basename( get_permalink($id) );
return $slug;
}
Esto te devolverá el slug del post especificado que puedes pasar como argumento. Por defecto, te dará el slug del post actual.

He creado una solución que obtiene los menús y extrae los slugs de allí. No estoy seguro de que funcione perfectamente con menús personalizados, pero al menos cuando el menú utiliza publicaciones, categorías u otras opciones que ofrece WordPress, está funcionando.
Puedes colocar esta función dentro de tu archivo functions.php y llamarla en cualquier parte de tu tema.
//Necesitas pasar el slug del menú como parámetro a la función.
//Reemplaza $current_menu con el slug del menú del cual deseas obtener los slugs.
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;
}
Esta función devolverá un array con la lista de slugs extraídos de las URLs del menú.
