导航菜单href page' s slug

时间:2016-02-23 15:44:40

标签: wordpress wordpress-theming

我们如何更新菜单以获取页面的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>

正如我所见&#34;首页&#34;,&#34;第二页&#34;和&#34;第三页&#34;是一堆页。 如何更新菜单链接

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

而不是

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

看起来default arguments之一没有提供此解决方案

2 个答案:

答案 0 :(得分: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 );

答案 1 :(得分:0)

也许您需要使用Wordpress菜单的自定义链接。 Read this