Obtener el slug del elemento del menú

16 ene 2013, 13:04:01
Vistas: 20K
Votos: 1

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

1
Comentarios

https://wordpress.stackexchange.com/a/13984 revisa ese método para obtener el slug de los términos

Mark Irkzher Mark Irkzher
25 dic 2017 14:02:40
Todas las respuestas a la pregunta 4
0

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.

17 may 2014 11:31:57
0

Puedes hacer algo como esto:

$slug = sanitize_title( $menu_item->title );

Sin embargo, no es 100% confiable, porque -creo- el slug no siempre (o no tiene por qué ser) igual que el título.

31 may 2017 09:52:31
0

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ú.

30 mar 2023 17:51:12
1
-1

Es posible obtener el slug con $menu_item->post_name;.

16 ene 2013 15:13:32
Comentarios

No, eso devuelve el ID de la publicación en muchos casos. Parece un error.

fuxia fuxia
16 ene 2013 15:35:43