Поддержка Проблемы и решения Вставка своего тега с классом в меню, определение ярлы

  • Решено Hellnik

    (@hellnik)


    Доброго времени.
    Необходимо было вставить свой тег с css классом в меню wp_nav_menu, нашел код, который вставляет, но столкнулся с проблемой, этот код не определят slug(ярлык) рубрики, а определяет только Страницы.

    function add_slug_class_to_menu_item($output){
    	$ps = get_option('permalink_structure');
    	if(!empty($ps)){
    		$idstr = preg_match_all('/<li id="menu-item-(\d+)/', $output, $matches);
    		foreach($matches[1] as $mid){
    			$id = get_post_meta($mid, '_menu_item_object_id', true);
    			$slug = basename(get_permalink($id));
    			$output = preg_replace('/menu-item-'.$mid.'">/', 'menu-item-'.$mid.' menu-item-'.$slug.'"><span class="'.$slug.'"></span>', $output, 1);
    		}
    	}
    	return $output;
    }
    add_filter('wp_nav_menu', 'add_slug_class_to_menu_item');

    То есть он без проблем выводит по умолчанию: Главная, Пример страницы. А когда в меню добавляю рубрику, то идет пустое место. Вот собственно тег, который мне было необходимо вывести перед ссылкой меню: <span class=»‘.$slug.'»></span>

    Для пояснения:
    Структура ссылки такая у меня сейчас:
    <li class="name"><a href="link">Food</a></li>
    А необходимо сделать вот так

    <li class="name"><span class="food"></span> <a href="link">Food</a></li>
    <li class="name"><span class="auto"></span> <a href="link">Auto</a></li>
    <li class="name"><span class="forum"></span> <a href="link">Forum</a></li>

    food, auto, forum — это ярлыки рубрик, которые можно менять при создании рубрик. вот именно ярлыки рубрик нужно определить и вывести в теги, как класс

    Я когда поставил код, думал, ну все, теперь будет без проблем определять ярлык рубрики и выводить его в класс тега, но не могу понять, в чем проблема.

    Может кто помочь решить данную проблему или найти другой способ вывода перед ссылкой своего тега с классом?

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Для внесения изменений в структуру меню есть специальный компонент — Walkerкодекс или мануал на русском

    Правда там тоже не самый простой в освоении код.

    Кстати, span’ы можно вставлять в пункты меню прямо через админку — это удобно, когда нужно вывести какую-нибудь иконку и не хочется лезть для этого в код.

    Egmalt, действительно можно вставлять через админку теги в меню, спасибо, не знал.
    По поводу Walker, я как раз использую его start_el метод, но там определяется только ID категории, но не сам ярлык, истина где то рядом)

    Почитаю кодекс, что Вы скинули, может решу проблему с функцией.

    Но вдруг кто сталкивался с такой функцией, буду признателен в решении проблемы с выводом ярлыка рубрики в ней.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Попробуйте ваш фрагмент заменить на этот:

    function add_slug_class_to_menu_item( $args, $item ) {
    	if ( ! $args->before ) {
    		$args->before = sprintf( '<span class="%s"></span>',
    			esc_attr( wp_basename( $item->url ) )
    		);
    	}
    	return $args;
    }
    add_filter( 'nav_menu_item_args', 'add_slug_class_to_menu_item', 10, 2 );

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, wpcute.ru

    Доброго.

    Но вдруг кто сталкивался с такой функцией, буду признателен в решении проблемы с выводом ярлыка рубрики в ней.

    Если тег span только для вывода картинки и привязка к url не критична, Вы можете присвоить классы food, auto, forum и т.д. в админке WordPress (у пунктов меню есть поле для ввода class, если не включено — активируйте в Настройках экрана в правом верхнем угле) и потом через css с помощью псевдоселектора :before вставить изображение, как-нибудь так:

    li.food:before {
        content: "";
        display: block;
        width: 10px;
        height: 10px;
        background: url('img/icon-food.png') no-repeat;
    }

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «Вставка своего тега с классом в меню, определение ярлы» закрыта для новых ответов.