【问题标题】:How to target specific wp_nav_menu in function?如何在函数中定位特定的 wp_nav_menu?
【发布时间】:2014-10-05 14:28:04
【问题描述】:

我正在通过 function.php 在我的 wp_nav_menu 上添加一个特定的类,但我无法定位一个特定的菜单:这就是我得到的

function add_menuclass_active($ulclass) {
   return preg_replace('/<a /', '<a class="list-group"', $ulclass, 1);
}
 add_filter('wp_nav_menu', 'add_menuclass_active');

我也尝试过使用但没有运气

function add_menuclass_active($ulclass) {
  if( $ulclass['theme_location'] == 'CUSTOM MENU' )
   return preg_replace('/<a /', '<a class="list-group"', $ulclass, 1);
}
add_filter('wp_nav_menu', 'add_menuclass_active');

【问题讨论】:

  • 你想达到什么目的?
  • @Rohil_PHPBeginner 请看下面的答案
  • 你可以那样做function special_nav_class($item){ $menu_locations = get_nav_menu_locations(); if ( has_term($menu_locations['primary-menu'], 'nav_menu', $item) ){\Place your code here\} 吗?
  • @Rohil_PHPBeginner 该代码看起来像我从我提出的同一个问题中得到的代码,但它根据我在此链接中的粘贴箱tinyurl.com/pf2dvpb 给出了错误

标签: php wordpress


【解决方案1】:

感谢answer from wordpress stack 我得到了这个解决方案:

将此添加到您的functions.php

register_nav_menus(array(
'top-menu' => __('Menu1', 'twentyfourteen'),
'side-menu' => __('Menu2', 'twentyfourteen'),
'footer-menu' => __('Menu3', 'twentyfourteen')
)
);

function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {
    $menu_locations = get_nav_menu_locations();

    if ( has_term($menu_locations['top-menu'], 'nav_menu', $item) ) {
       $item_output = preg_replace('/<a /', '<a class="list-group" ', $item_output, 1);
    }

    return $item_output;
}
add_filter('walker_nav_menu_start_el', 'my_walker_nav_menu_start_el', 10, 4);

最后,您必须为特定菜单选择选项“Menu1”,您必须从仪表板 Apperance->menus 在其上添加锚自定义类。 [其他锚链接不需要自定义类的菜单选择menu2或menu3]

要将“活动类”添加到特定菜单的第一个菜单项,然后试试这个:

function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {
    $menu_locations = get_nav_menu_locations();


    if ( has_term($menu_locations['top-menu'], 'nav_menu', $item) ) {
       $item_output = preg_replace('/<a /', '<a class="list-group" ', $item_output, 1);
if ($item->menu_order == 1){
 $item_output = preg_replace('/<a /', '<a class="list-group active" ', $item_output, 1);
}
    }

    return $item_output;
}
add_filter('walker_nav_menu_start_el', 'my_walker_nav_menu_start_el', 10, 4);

如果必须将活动类添加到所有菜单的第一个菜单项,则使用此:

function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {
    $menu_locations = get_nav_menu_locations();


    if ( has_term($menu_locations['top-menu'], 'nav_menu', $item) ) {
       $item_output = preg_replace('/<a /', '<a class="list-group" ', $item_output, 1);
    }
 if ($item->menu_order == 1){
 $item_output = preg_replace('/<a /', '<a class="active" ', $item_output, 1);
}
    return $item_output;
}
add_filter('walker_nav_menu_start_el', 'my_walker_nav_menu_start_el', 10, 4);

【讨论】:

    【解决方案2】:

    主题位置存储在导航菜单参数中,您需要将其添加到函数参数中:

    function add_menuclass_active( $nav_menu, $args ) {
        if( $args->theme_location == 'CUSTOM MENU' )
            return preg_replace( '/<a /', '<a class="list-group"', $nav_menu, 1 );
        return $nav_menu;
    }
    add_filter( 'wp_nav_menu', 'add_menuclass_active', 10, 2 );
    

    【讨论】:

    • 这根本不输出带有“list-group”类的菜单,而我上面的却输出了。
    猜你喜欢
    • 2019-10-29
    • 2018-06-08
    • 2015-05-14
    • 2014-08-26
    • 2019-09-23
    • 2012-07-06
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多