itsource

Class current_page_item 추가 중

mycopycode 2023. 10. 29. 19:42
반응형

Class current_page_item 추가 중

워드프레스 디자인 작업을 하고 있는데 사용자 정의 메뉴를 만들고 싶습니다.

$items = wp_get_nav_menu_items('Menu', array(
    'order'                  => 'ASC',
    'orderby'                => 'menu_order',
    'post_type'              => 'nav_menu_item',
    'post_status'            => 'publish',
    'output'                 => ARRAY_A,
    'output_key'             => 'menu_order',
    'nopaging'               => true,
    'update_post_term_cache' => false));
echo '<pre>'; print_r($items); echo '</pre>'; 
foreach($items as $item){
    echo '<div class="menu_entry"><a href="'.$item->url.'">'.$item->title.'</a></div>';
}

문제는 표준 메뉴에서 워드프레스 생성인 "현재 페이지" 클래스가 필요하다는 것입니다.

이 수업을 추가하는 방법에 대한 아이디어가 있습니까?

솔루션 시간:

이 클래스들을 추가하는 워드프레스의 기능은.를 사용할 때 이미 호출됩니다.wp_nav_menu그러나 그렇지는wp_get_nav_menu_items. 다행히 후자는 필터를 제공하여 우리가 직접 할 수 있습니다.

add_filter( 'wp_get_nav_menu_items', 'prefix_nav_menu_classes', 10, 3 );

function prefix_nav_menu_classes($items, $menu, $args) {
    _wp_menu_item_classes_by_context($items);
    return $items;
}

페이지/category 등의 ID인 메뉴항목 object_id와 현재 페이지/category ID를 비교하시면 됩니다.

(검증되지 않은) 것과 같은 것;

global $post;
$thePostID = $post->ID;
foreach($items as $item){

    if($thePostID === $item->object_id) {
        echo '<div class="menu_entry"><a href="'.$item->url.'" class="current-menu-item">'.$item->title.'</a></div>';
    }else{
        echo '<div class="menu_entry"><a href="'.$item->url.'">'.$item->title.'</a></div>';
    }

}

기능을 이용해서.블로그 페이지를 포함한 모든 페이지에서 정상적으로 작동합니다.

예제 참조:

if ( $menu_items = wp_get_nav_menu_items( 'menu' ) ) {
   foreach ( $menu_items as $menu_item ) {
      $current = ( $menu_item->object_id == get_queried_object_id() ) ? 'current' : '';
      echo '<li class="' . $current . '"><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>';
   }
}

언급URL : https://stackoverflow.com/questions/10019493/adding-class-current-page-item

반응형