Tôi tìm thấy một giải pháp tại trang web này thông qua việc sử dụng xe tập đi tùy chỉnh .
Hai bước: thay thế mã wp_nav_menu mặc định bằng mã đã được chỉnh sửa và sau đó thêm mã vào hàm.php của chủ đề.
Đầu tiên, thay thế wp_nav_code mặc định bằng dòng sau (mã được sao chép từ trang web trên):
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())
);
Tiếp theo, thêm đoạn mã sau vào hàm.php. Bằng cách này, bạn thực sự có thể thêm một lớp vào các liên kết menu:
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';
}
}
}
Đến cuối mã là một số dòng bắt đầu bằng $ itemDefput. Cụ thể, bạn muốn xem phần này:
$item_output .= '<a'. $attributes .'>';
Bởi vì dòng này xác định đầu ra cho đầu html liên kết. Nếu bạn thay đổi nó thành một cái gì đó như thế này:
$item_output .= '<a'. $attributes . 'class="abc"' .'>';
Sau đó, tất cả các liên kết của bạn trong menu sẽ có class = "abc" được thêm vào chúng.
Điều đó nói rằng, nó không cho phép một lớp tùy chỉnh cho mỗi liên kết (hoặc ít nhất là tôi không biết cách mã hóa nó). Đây là một vấn đề đối với tôi.
Đối với những người hỏi tại sao bạn muốn làm điều này? Tôi muốn để menu của mình liên kết mở hộp đèn (hộp màu, để cụ thể hơn) và họ yêu cầu các lớp trên các liên kết để làm điều đó. Ví dụ:
<a class="lightbox1" href="#">Photo</a>
Có cách nào để tự động tạo các lớp, chẳng hạn như "lightbox1" cho liên kết đầu tiên, "lightbox2" cho liên kết thứ hai, v.v.