source

메뉴 항목 및 페이지 목록에 대한 li 클래스 & ID 삭제

myloves 2023. 3. 29. 22:07

메뉴 항목 및 페이지 목록에 대한 li 클래스 & ID 삭제

WordPress 기본 CSS 클래스 출력 예:

<li id="menu-item-55" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-55">

<li class="page_item page-item-37">

메뉴와 페이지 목록 항목은 다양한 li와 함께 제공됩니다.class그리고.id.

에서의 삭제 방법functions.php메뉴와 페이지 목록을 위한 파일?

새 클래스나 ID가 아닌 두 개의 필터에 연결하여 빈 배열 또는 문자열을 반환함으로써 이러한 필터를 제거할 수 있습니다.

add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
add_filter('page_css_class', 'my_css_attributes_filter', 100, 1);
function my_css_attributes_filter($var) {
  return is_array($var) ? array() : '';
}

특정 클래스를 유지하려면 다음과 같은 작업을 수행할 수 있습니다.

function my_css_attributes_filter($var) {
  return is_array($var) ? array_intersect($var, array('current-menu-item')) : '';
}

리처드의 대답 위에 덧붙이는 내용입니다.

현재 메뉴 항목 클래스를 다른 것으로 변경하고 싶은 경우.

        add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
        add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
        function my_css_attributes_filter($var) {
            if(is_array($var)){
                $varci= array_intersect($var, array('current-menu-item'));
                $cmeni = array('current-menu-item');
                $selava   = array('selectedmenu');
                $selavaend = array();
                $selavaend = str_replace($cmeni, $selava, $varci);
            }
            else{
                $selavaend= '';
            }
        return $selavaend;
        }

여기 제가 생각해낸 해결책이 있습니다.wp_nav_menu에서 모든 ID와 클래스를 삭제하지만 클래스 및/또는 ID의 "승인된" 목록을 작성할 수 있습니다.또한 긴 "current-menu-item"을 "active"로 변경합니다.기본 WordPress CSS 스타일을 유지하려면 코드의 해당 섹션을 삭제하십시오.이 투고를 최소한으로 유지하기 위해, 코드 첨부 페이스트 박스에의 링크를 다음에 나타냅니다.
http://pastebin.com/W16cxDfY - 기능을 참조하십시오.php 파일
http://pastebin.com/CGx4aprf - 템플릿의 경우 메뉴 이동처

단순하게add_filter('nav_menu_item_id', '__return_false');메뉴 항목 ID의 경우

li를 제거하는 가장 좋은 방법은 다음과 같습니다.테스트 및 검증 완료

           <?php
            $menuParameters = array(
              'theme_location'  => 'header-menu-top', 
              'container'       => false,
              'echo'            => false,
              'items_wrap'      => '%3$s',
              'depth'           => 0,
            );
            echo strip_tags(wp_nav_menu( $menuParameters ), '<a>' );
            ?>

목록 클래스 및 ID를 모두 제거하려면 이 항목을 함수에 추가하십시오.php

add_filter('nav_menu_item_id', 'filter_menu_id');
add_filter( 'nav_menu_css_class', 'filter_menu_li' );
function filter_menu_li(){
    return array('');   
}
function filter_menu_id(){
    return; 
}

Richard의 답변에 추가:남겨진 빈 클래스를 정리해야 합니다.

//Strip Empty Classes
add_filter ('wp_nav_menu','strip_empty_classes');
function strip_empty_classes($menu) {
    $menu = preg_replace('/ class=(["\'])(?!active).*?\1/','',$menu);
    return $menu;
}

솔루션:

$defaults = array(
    'theme_location'  => '',
    'menu'            => '',
    'container'       => '',
    'container_class' => '',
    'container_id'    => '',
    'menu_class'      => '',
    'menu_id'         => '',
    'echo'            => false, // param important
    'fallback_cb'     => 'wp_page_menu',
    'before'          => '',
    'after'           => '',
    'link_before'     => '',
    'link_after'      => '',
    'items_wrap'      => '',
    'depth'           => -1,
    'walker'          => ''
);

ob_start();
echo preg_replace( '#<li[^>]+>#', '<li>', wp_nav_menu( $defaults ) );
$mainNav = ob_get_clean();

// In the page :
echo $mainNav;

언급URL : https://stackoverflow.com/questions/5222140/remove-li-class-id-for-menu-items-and-pages-list