wp_nav_menu 하위 메뉴 클래스 이름을 변경 하시겠습니까?
<ul class="sub-menu">
WordPress 자체에서 생성 한 자식 을 사용자 지정 클래스 이름 으로 변경하는 방법이 있습니까?
을 <ul>
사용하여 이름을 제거하거나 변경할 수 있는 부모 를 알고 있습니다 'menu_class' => 'newname'
.
답을 찾을 수 없었습니다. Itried 'submenu_class' => 'customname'
. 나에게는 논리처럼 보이지만 분명히 올바른 것은 아닙니다.
어떤 아이디어?
이에 대한 옵션은 없지만 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 preg_replace 필터 (테마 functions.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');
다음은 Richard가 "깊이"표시기를 추가 한 업데이트입니다. 출력은 레벨 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' );
항상 그렇듯이, 사이트에 무언가를 쓰기 전에 오랫동안 살펴본 후 여기에 게시 한 지 1 분 만에 해결책을 찾았습니다.
다른 사람이 찾을 수 있도록 여기에서 공유하겠다고 생각했습니다.
//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)
에:
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 );
참고 : 저를 클릭하십시오
Walker를 연장 할 필요가 없습니다. 이것은 다음을 수행합니다.
function overrideSubmenuClasses() {
return array('myclass1', 'myclass2');
}
add_action('nav_menu_submenu_css_class', 'overrideSubmenuClasses');
후크를 사용할 수 있습니다.
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>
cutomclass css 클래스 이름을 하위 메뉴로 바꾸는 것이 좋습니다. 찾기 및 바꾸기를 사용하십시오. 찾기 : .customclass .sub-menu로 교체, 나를 위해 작동합니다.
기본 "하위 메뉴"클래스 이름을 변경하려면 간단한 방법이 있습니다. 워드 프레스 파일에서 변경할 수 있습니다.
위치 : www / project_name / wp-includes / nav-menu-template.php.
open this file and at line number 49, change the name of sub-menu class with your custom class.
Or you can also add your custom class next to sub-menu.
Done.
It worked for me.I used wordpress-4.4.1.
참고URL : https://stackoverflow.com/questions/5034826/wp-nav-menu-change-sub-menu-class-name
'Programing' 카테고리의 다른 글
정수를 확인하는 SQL LIKE 조건? (0) | 2020.11.30 |
---|---|
문자열에서 모든 특수 문자를 제거하는 정규식? (0) | 2020.11.30 |
Ruby에서 각각과 collect 메소드의 차이점 (0) | 2020.11.30 |
GURU_MEDITATION 오류 상태에서 Virtualbox 머신을 어떻게 삭제합니까? (0) | 2020.11.30 |
Pandas에서 0 만 포함 된 열을 어떻게 삭제합니까? (0) | 2020.11.30 |