이 사이트 에서 맞춤형 워커를 사용 하여 해결책을 찾았습니다 .
두 단계 : 기본 wp_nav_menu 코드를 편집 된 코드로 바꾸고 테마의 functions.php에 코드를 추가하십시오.
먼저 기본 wp_nav_code를 다음으로 바꿉니다 (코드는 위 사이트에서 복사 됨).
wp_nav_menu( array(
'menu' => 'Main Menu',
'container' => false,
'menu_class' => 'nav',
'echo' => true,
'before' => '',
'after' => '',
'link_before' => '',
'link_after' => '',
'depth' => 0,
'walker' => new description_walker())
);
다음으로 functions.php에 다음 코드를 추가하십시오. 이렇게하면 실제로 메뉴 링크에 클래스를 추가 할 수 있습니다.
class description_walker extends Walker_Nav_Menu
{
function start_el(&$output, $item, $depth, $args)
{
global $wp_query;
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
$class_names = $value = '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
$class_names = ' class="'. esc_attr( $class_names ) . '"';
$output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>';
$attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : '';
$attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
$attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : '';
$attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';
$prepend = '<strong>';
$append = '</strong>';
$description = ! empty( $item->description ) ? '<span>'.esc_attr( $item->description ).'</span>' : '';
if($depth != 0)
{
$description = $append = $prepend = "";
}
$item_output = $args->before;
$item_output .= '<a'. $attributes .'>';
$item_output .= $args->link_before .$prepend.apply_filters( 'the_title', $item->title, $item->ID ).$append;
$item_output .= $description.$args->link_after;
$item_output .= '</a>';
$item_output .= $args->after;
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
if ($item->menu_order == 1) {
$classes[] = 'first';
}
}
}
코드의 끝에는 $ item_output으로 시작하는 몇 줄이 있습니다. 특히, 당신은이 조각을보고 싶습니다 :
$item_output .= '<a'. $attributes .'>';
이 줄은 링크 html의 시작에 대한 출력을 결정하기 때문입니다. 이것을 다음과 같이 변경하면 :
$item_output .= '<a'. $attributes . 'class="abc"' .'>';
그런 다음 메뉴의 모든 링크에 class = "abc"가 추가됩니다.
즉, 각 링크마다 사용자 정의 클래스를 허용하지 않습니다 (또는 적어도 코딩 방법을 모르겠습니다). 이것은 나에게 문제입니다.
청하는 사람들을 위해 이 작업을 수행 할 왜? 메뉴 링크가 라이트 박스 (컬러 박스,보다 구체적으로)를 열도록하려면 링크에 클래스가 있어야합니다. 예를 들면 다음과 같습니다.
<a class="lightbox1" href="#">Photo</a>
첫 번째 링크의 경우 "lightbox1", 두 번째 링크의 경우 "lightbox2"등과 같이 클래스를 동적으로 생성하는 방법이 있습니까?