Получить slug пункта меню
Я использую пользовательские меню и хотел бы получить 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
У вас есть 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 которой вы передадите в качестве аргумента. По умолчанию она возвращает слаг текущей записи.

Я создал решение, которое получает меню и извлекает из них слаги (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 меню.
