Получить slug пункта меню

16 янв. 2013 г., 13:04:01
Просмотры: 20K
Голосов: 1

Я использую пользовательские меню и хотел бы получить slug'и пунктов меню. Это возможно?

// Получаем меню на основе $menu_name (аналогично параметрам 'theme_location' или 'menu' в wp_nav_menu)
// Этот код основан на коде wp_nav_menu для получения ID меню из slug меню

$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
Комментарии

https://wordpress.stackexchange.com/a/13984 проверьте этот метод для получения слага (slug) для терминов

Mark Irkzher Mark Irkzher
25 дек. 2017 г. 14:02:40
Все ответы на вопрос 4
0

У вас есть ID записи, поэтому вы можете использовать эту пользовательскую функцию для получения слага (slug) любой записи.

function get_the_slug( $id=null ){
    if( empty($id) ):
        global $post;
        if( empty($post) )
            return ''; // Глобальная переменная $post недоступна
        $id = $post->ID;
    endif;

    $slug = basename( get_permalink($id) );
    return $slug;
}

Эта функция вернет слаг указанной записи, ID которой вы передадите в качестве аргумента. По умолчанию она возвращает слаг текущей записи.

17 мая 2014 г. 11:31:57
0

Вы можете сделать что-то подобное:

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

Однако это не на 100% надежно, потому что - я думаю - ярлык не всегда (или не обязан быть) таким же, как заголовок.

31 мая 2017 г. 09:52:31
0

Я создал решение, которое получает меню и извлекает из них слаги (slug). Я не уверен, что оно идеально работает с пользовательскими меню, но по крайней мере, когда меню использует записи, рубрики или другие возможности, которые предлагает WordPress, оно работает.

Вы можете поместить эту функцию в файл functions.php и вызывать её в любом месте вашей темы.

//Вам нужно передать слаг меню в качестве параметра функции.
//Замените $current_menu на слаг меню, из которого вы хотите получить слаги.

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;
}

Эта функция возвращает массив со списком слагов, извлеченных из URL меню.

30 мар. 2023 г. 17:51:12
1
-1

Можно получить slug с помощью $menu_item->post_name;.

16 янв. 2013 г. 15:13:32
Комментарии

Нет, во многих случаях это возвращает ID записи. Похоже на баг.

fuxia fuxia
16 янв. 2013 г. 15:35:43