2015-05-08 2 views
1

Итак, я создал пользовательский класс walker, позволяющий мне обернуть мои выпадающие меню в контейнере, чтобы я мог добавить пользовательский фон и управлять стилем. Длинный список причин, почему в моей команде и я решил, что мы делаем это именно так. Тем не менее, выпадающий элемент ONE необходимо теперь обернуть в тег для ссылки на спонсора. Конечно, я могу манипулировать пользовательским Уокер, но это добавит ссылку на все целевые элементы.Добавить обертку ссылки в одно раскрывающееся меню в Wordpress

Так что я хочу знать, если можно просто нацелить раскрывающееся меню ONE, мне нужно. Скажем, это литий # меню пункт-18

Вот мой заказ Walker код

class My_Custom_Walker_Class extends Walker_Nav_Menu { 
    function start_lvl(&$output, $depth) { 
      $indent = ($depth) ? str_repeat("\t", $depth) : ''; 

      $output .= $indent . '<ul class="sub-menu"><div class="sub-menu-child">'; 
    } 
    function end_lvl(&$output, $depth) { 
      $indent = str_repeat("\t", $depth); 
      $output .= $indent . '</div></ul>'; 
    } 
} 

/** 
* Add the Menu_With_Data_Attr walker to the wp_nav_menu() used by genesis_do_nav() 
*/ 

add_filter('wp_nav_menu_args', function($args){ 
    if(isset($args['menu_class']) && 'menu genesis-nav-menu menu-primary' === $args['menu_class']) { 
      if(class_exists('My_Custom_Walker_Class')) { 
        $args['walker'] = new My_Custom_Walker_Class(); 
      } 
    } 
    return $args; 
}); 

ответ

1

Вы можете повторно определить start_el метод родительского класса в пользовательском классе, но кажется, что много код для дублирования для минимального изменения (мне это не нравится).

Лучшее решением является использование фильтра крюка в конце родительского метода, walker_nav_menu_start_el, чтобы добавить оболочку только для элемента, который вы хотите, как это:

add_filter('walker_nav_menu_start_el', function($item_output, $item, $depth, $args){ 

    if(18 == $item->ID && 'menu genesis-nav-menu menu-primary' === $args['menu_class']) 

     return sprintf('<div class="targeted">%s</div>', $item_output); 

    return $item_output; 

}, 10, 4); 

Изменения обертки div с тем, что Вы предпочитаете.

+0

Спасибо! Я попробую это в понедельник и отчитаю! – Ishio

+0

Привет, вы уже пробовали? Это сработало? Мне любопытно :) – d79

+0

Я пробовал, и к сожалению, это не сработало. Он просто просто передал функцию. Я рассмотрел вопрос о слиянии вашей функции с моей и запуске их отдельно. – Ishio

Смежные вопросы