wp nav menu изменить имя класса подменю?
есть ли способ изменить ребенка <ul class="sub-menu"> генерируется самим Wordpress
к пользовательскому имени класса?
Я знаю, что родительский ul вы можете удалить или изменить имя с помощью 'menu_class' => 'newname'
Я не мог найти...
пробовал 'submenu_class' => 'customname': D кажется мне логикой, но очевидно, что это не так..
какие идеи?
12 ответов:
для этого нет опции, но вы можете расширить объект "walker", который Wordpress использует для создания меню HTML. Только один метод должен быть переопределен:
class My_Walker_Nav_Menu extends Walker_Nav_Menu { function start_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); $output .= "\n$indent<ul class=\"my-sub-menu\">\n"; } }тогда вы просто передаете экземпляр вашего ходока в качестве аргумента
wp_nav_menuвот так:'walker' => new My_Walker_Nav_Menu()
класс заменить:
echo str_replace('sub-menu', 'menu menu_sub', wp_nav_menu( array( 'echo' => false, 'theme_location' => 'sidebar-menu', 'items_wrap' => '<ul class="menu menu_sidebar">%3$s</ul>' ) ) );
вы можете использовать WordPress человек фильтр (в ваших функциях темы.PHP-файл) пример:
function new_submenu_class($menu) { $menu = preg_replace('/ class="sub-menu"/','/ class="yourclass" /',$menu); return $menu; } add_filter('wp_nav_menu','new_submenu_class');
вот обновление к тому, что Ричард сделал, что добавляет индикатор "глубина". Выходной уровень-0, Уровень-1, Уровень-2, и т. д.
class UL_Class_Walker extends Walker_Nav_Menu { function start_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); $output .= "\n$indent<ul class=\"level-".$depth."\">\n"; } }
Это старый вопрос, и я не уверен, что решение, которое я собираюсь упомянуть, было доступно к тому времени, когда вы спросили, но я думаю, что это стоит упомянуть. Вы можете достичь желаемого, добавив фильтр в
nav_menu_submenu_css_class. Смотрите пример ниже - вы можете заменитьmy-new-submenu-classпо классу (ам) вы хотите:function my_nav_menu_submenu_css_class( $classes ) { $classes[] = 'my-new-submenu-class'; return $classes; } add_filter( 'nav_menu_submenu_css_class', 'my_nav_menu_submenu_css_class' );
Как это всегда бывает, после того, как я долго искал, прежде чем писать что-то на сайт, всего через минуту после того, как я разместил здесь, я нашел свое решение.
Он думал, что я поделюсь им здесь, чтобы кто-то другой мог найти его.
//Add "parent" class to pages with subpages, change submenu class name, add depth class class Prio_Walker extends Walker_Nav_Menu { function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ){ $GLOBALS['dd_children'] = ( isset($children_elements[$element->ID]) )? 1:0; $GLOBALS['dd_depth'] = (int) $depth; parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output ); } function start_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); $output .= "\n$indent<ul class=\"children level-".$depth."\">\n"; } } add_filter('nav_menu_css_class','add_parent_css',10,2); function add_parent_css($classes, $item){ global $dd_depth, $dd_children; $classes[] = 'depth'.$dd_depth; if($dd_children) $classes[] = 'parent'; return $classes; } //Add class to parent pages to show they have subpages (only for automatic wp_nav_menu) function add_parent_class( $css_class, $page, $depth, $args ) { if ( ! empty( $args['has_children'] ) ) $css_class[] = 'parent'; return $css_class; } add_filter( 'page_css_class', 'add_parent_class', 10, 4 );вот где я нашел решение: решение в форуме поддержки Wordpress
Я должен был изменить:
function start_lvl(&$output, $depth)to:
function start_lvl( &$output, $depth = 0, $args = array() )потому что я получал ошибку несовместимости:
Strict Standards: Declaration of My_Walker_Nav_Menu::start_lvl() should be compatible with Walker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = Array)
Это может быть полезно для вас
как добавить родительский класс для пункта меню
function wpdocs_add_menu_parent_class( $items ) { $parents = array(); // Collect menu items with parents. foreach ( $items as $item ) { if ( $item->menu_item_parent && $item->menu_item_parent > 0 ) { $parents[] = $item->menu_item_parent; } } // Add class. foreach ( $items as $item ) { if ( in_array( $item->ID, $parents ) ) { $item->classes[] = 'menu-parent-item'; } } return $items; } add_filter( 'wp_nav_menu_objects', 'wpdocs_add_menu_parent_class' ); /** * Add a parent CSS class for nav menu items. * @param array $items The menu items, sorted by each menu item's menu order. * @return array (maybe) modified parent CSS class. */добавление условных классов в пункты меню
function wpdocs_special_nav_class( $classes, $item ) { if ( is_single() && 'Blog' == $item->title ) { // Notice you can change the conditional from is_single() and $item->title $classes[] = "special-class"; } return $classes; } add_filter( 'nav_menu_css_class' , 'wpdocs_special_nav_class' , 10, 2 );Для справки : click me
Вы можете просто использовать крючок
add_filter( 'nav_menu_submenu_css_class', 'some_function', 10, 3 ); function some_function( $classes, $args, $depth ){ foreach ( $classes as $key => $class ) { if ( $class == 'sub-menu' ) { $classes[ $key ] = 'my-sub-menu'; } } return $classes; }здесь
$classes(array) - The CSS classes that are applied to the menu <ul> element. $args(stdClass) - An object of wp_nav_menu() arguments. $depth(int) - Depth of menu item. Used for padding.
выше мне нужно небольшое изменение, которое я пытаюсь, но я не в состоянии сделать это, ваш вывод будет выглядеть так
<ul> <li id="menu-item-13" class="depth0 parent"><a href="#">About Us</a> <ul class="children level-0"> <li id="menu-item-17" class="depth1"><a href="#">Sample Page</a></li> <li id="menu-item-16" class="depth1"><a href="#">About Us</a></li> </ul> </li> </ul>то, что я ищу
<ul> <li id="menu-item-13" class="depth0"><a class="parent" href="#">About Us</a> <ul class="children level-0"> <li id="menu-item-17" class="depth1"><a href="#">Sample Page</a></li> <li id="menu-item-16" class="depth1"><a href="#">About Us</a></li> </ul> </li> </ul>В приведенном выше я поместил родительский класс внутри родительской якорной ссылки, которая
<li id="menu-item-13" class="depth0"><a class="parent" href="#">About Us</a>
Я бы предложил заменить ваше имя класса css cutomclass в подменю. используйте поиск и замену: ie. находить. :customclass заменить .подменю, работать на меня.
чтобы изменить имя класса "подменю" по умолчанию, есть простой способ. Вы можете просто изменить его в файле wordpress.
расположение: www / имя_проекта / wp-включает / nav-меню-шаблон.РНР.
откройте этот файл и в строке 49 измените имя класса подменю с помощью пользовательского класса.
или вы также можете добавить свой пользовательский класс рядом с подменю.
сделано.
Это сработало для меня.Я использовал wordpress-4.4.1.
Comments