web-dev-qa-db-ja.com

WordPress nav_menu_link_attributesが機能しない

すべてのメニュー項目にデータ属性を追加しようとしていますが、機能していません。私はwp_nav_menuを使って私のメニューウォーカーを呼び出すこともしています。

function menu_anchor_attributes ( $atts, $item, $args ) {
    $atts['data-menuanchor'] = $item->attr_title;
return $atts;
}
add_filter( 'nav_menu_link_attributes', 'menu_anchor_attributes', 10, 3 );

私はこのウォーカーを含む私のフレームワークとしてJointsWPを使用しています。

// The Top Menu
function joints_top_nav() {
     wp_nav_menu(array(
        'container' => false,                           // Remove nav container
        'menu_class' => 'horizontal menu',       // Adding custom nav class
        'items_wrap' => '<ul id="%1$s" class="%2$s" data-responsive-menu="accordion medium-dropdown">%3$s</ul>',
        'theme_location' => 'main-nav',                 // Where it's located in the theme
        'depth' => 5,                                   // Limit the depth of the nav
        'fallback_cb' => false,                         // Fallback function (see below)
        'walker' => new Topbar_Menu_Walker()
    ));
} 

// Big thanks to Brett Mason (https://github.com/brettsmason) for the awesome walker
class Topbar_Menu_Walker extends Walker_Nav_Menu {
    function start_lvl(&$output, $depth = 0, $args = Array() ) {
        $indent = str_repeat("\t", $depth);
        $output .= "\n$indent<ul class=\"menu\">\n";
    }
}
3
Keith Petrillo

属性が空の場合はいつでもWordPressのフィルタは属性を表示しないことを決定するので、これに対する簡単なテストは以下の通りです。

function menu_anchor_attributes ( $atts, $item, $args ) {
    $atts['data-menuanchor'] = ( ! empty( $item->attr_title ) ) ? $item->attr_title : 'test';
    return $atts;
}
add_filter( 'nav_menu_link_attributes', 'menu_anchor_attributes', 10, 3 );

こうすると、title属性がバックエンドに入力されていない場合でも、testの値を持つ属性が表示されます。

1
Howdy_McGee

フィルタnav_menu_link_attributesは、wp-adminで作成されたメニューに対してのみ機能します。デフォルトでは、バックエンドにメニューを作成していなくても、Appearance - > Menusでメニューを作成をクリックするとすぐに、wp_nav_menuは公開ページを返します。

0
Nicola