2016-02-23 2 views
0

Как мы можем обновить меню, чтобы получить href с помощью slug страницы вместо цельной ссылки?Навигационное меню href page slug

По умолчанию со следующим кодом

functions.php

function register_my_menu() { 
    register_nav_menu('header-menu',__('Header Menu')); 
} 
add_action('init', 'register_my_menu'); 

header.php

wp_nav_menu(array('theme_location' => 'header-menu')); 

Outpu HTML выглядит следующим образом:

<ul> 
    <li class="page_item page-item-4 current_page_item"><a href="http://localhost/wordpress_tester/first-page/">First 
      page</a></li> 
    <li class="page_item page-item-2"><a href="http://localhost/wordpress_tester/second-page/">Second Page</a></li> 
    <li class="page_item page-item-9"><a href="http://localhost/wordpress_tester/third-page/">Third Page</a></li> 
</ul> 

Как я вижу, страницы «первая страница», «вторая страница» и «третья страница» являются пулями страниц. Что можно сделать, чтобы обновить ссылки меню на

<a href="#first-page">First Page</a> 

вместо

<a href="http://localhost/wordpress_tester/first-page/">First Page</a> 

выглядит как один из default arguments не дают это решение

ответ

0

Вы можете использовать nav_menu_link_attributes фильтр: nav_menu_link_attributes. Когда вы используете этот фильтр, вы получаете атрибуты ссылок для каждого элемента меню, и вы можете их изменить. Атрибуты для ссылки выглядит следующим образом:

array (size=4) 
    'title' => string '' (length=0) 
    'target' => string '' (length=0) 
    'rel' => string '' (length=0) 
    'href' => string '#menu-item-1' (length=37) 

Как вы можете увидеть один из указанных атрибутов href атрибут, так что вы можете изменить его, как это:

add_filter('nav_menu_link_attributes', function($atts, $item, $args, $depth) { 

    $atts['href'] = '#' . $item->post_name; //or what you want, here you have all WP_Post menu object 

    return $atts; 
}, 10, 4); 
+0

Странно, но этот фильтр ничего не делает, как и другие фильтры, которые я пробовал, может быть что-то пропущено на моей стороне? У меня есть минимальная требуемая четкая тема и функция wp_nav_menu() в header.php, но после добавления фильтра ничего не изменилось. – Pumych

+0

Был ли у вас режим отладки включен для проверки некоторых ошибок php? Как вы применяете этот фильтр - с закрытием или с внешней функцией? Я пробовал этот фильтр и его работу на моем сайте. – pgk

+0

define ('WP_DEBUG', true); Я добавил фильтр в конце functions.php-файл в «двадцать четвертую» четкую тему. – Pumych

0

Возможно, вам нужно использовать пользовательские ссылки меню Wordpress. Read this

Смежные вопросы