2015-05-03 5 views
0

Я использую WordPress 4.2.1 и я создал пользовательские ходунки для wp_nav_menu()WordPress Пользовательского Walker Меню - Держите пользовательские классы только

В методе start_el() я получаю классы элементов с следующее:

function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) { 
    ... 

    $classes = empty($item->classes) ? array() : (array) $item->classes; 

    ... 
} 

Есть ли способ получить пользовательские классы «только»? (Admin/Внешний вид/Меню -> Классы CSS)

Кто-то может помочь? Спасибо

ответ

0

Нет никакого способа получить все пользовательские классы в wordpress. Но вы можете использовать 2 версии wordpress, а также оригинальную тему и модную тему, а затем сравнить ее с помощью программного обеспечения, такого как codecompare, Diff Checker или Win Merge.

0

Вы можете добавить свои классы в класс walker, как это.

class Description_Walker extends Walker_Nav_Menu 
{ 
    /** 
    * Start the element output. 
    * 
    * @param string $output Passed by reference. Used to append additional content. 
    * @param object $item Menu item data object. 
    * @param int $depth  Depth of menu item. May be used for padding. 
    * @param array $args Additional strings. 
    * @return void 
    */ 
    function start_lvl(&$output, $depth = 0, $args = array()) { 
    // depth dependent classes 
    $indent = ($depth > 0 ? str_repeat("\t", $depth) : ''); // code indent 
    $display_depth = ($depth + 1); // because it counts the first submenu as 0 
    $classes = array(
     'nav-submenu', 
     ($display_depth % 2 ? 'menu-odd' : 'menu-even'), 
     ($display_depth >=2 ? 'sub-sub-menu' : ''), 
     'menu-depth-' . $display_depth 
     ); 
    $class_names = implode(' ', $classes); 

    // build html 
    $output .= "\n" . $indent . '<ul class="' . $class_names . '">' . "\n"; 
} 

    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0) { 
    global $wp_query; 
    $indent = ($depth > 0 ? str_repeat("\t", $depth) : ''); // code indent 

    // depth dependent classes 
    $depth_classes = array(
     ($depth == 0 ? 'nav-item' : 'nav-submenu-item'), 
     ($depth >=2 ? 'sub-sub-menu-item' : ''), 
     ($depth % 2 ? 'menu-item-odd' : 'menu-item-even'), 
     'menu-item-depth-' . $depth 
    ); 
    $depth_class_names = esc_attr(implode(' ', $depth_classes)); 

    // passed classes 
    $classes = empty($item->classes) ? array() : (array) $item->classes; 
    $class_names = esc_attr(implode(' ', apply_filters('nav_menu_css_class', array_filter($classes), $item))); 

    // build html 
    $output .= $indent . '<li id="nav-menu-item-'. $item->ID . '" class="' . $depth_class_names . ' ' . $class_names . '">'; 

    // link attributes 
    $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  ) .'"' : ''; 
    $attributes .= ' class="menu-link ' . ($depth > 0 ? 'sub-menu-link' : 'main-menu-link') . '"'; 

    $item_output = sprintf('%1$s<a%2$s>%3$s%4$s%5$s</a>%6$s', 
     $args->before, 
     $attributes, 
     $args->link_before, 
     apply_filters('the_title', $item->title, $item->ID), 
     $args->link_after, 
     $args->after 
    ); 

    // build html 
    $output .= apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args); 
} 
} 
+0

Это не то, что я ищу. Мне нужно использовать пользовательские классы, которые я установил в администрировании (ввод/ввод символов css) и удалить классы, сгенерированные wp (item-item, current_menu_item ...) – Fredmat

0

Вы могли бы написать функцию, чтобы отфильтровать классы WordPress ...

function item_class(Array $item_class) 
{ 

    $cls = array_filter($item_class, function($value) { 
    return (str_replace(['menu-', 'page_', 'page-'], '', $value) != $value) ? false : true; 
    }); 

    return implode(' ', $cls); 
} 

Добавить в YR ходунки класса, а затем вызвать с пунктом меню. например:

echo '<a class="' . $this->item_class($item->classes) . '">'; 
Смежные вопросы