Не устраивает то, что при отсутствии класса у тега <li> остаётся <li class=" ">, т.е. цель убрать class=" ", если у <li> нет класса и убрать пробелы после первой кавычки, если <li> имеет классы.
Понимаю, что где-то в этой части кода надо править
psics: а javascript ом не хочешь попробывать сделатЬ?
Можно попробовать, но я не шарю🤣 Я ж не спец. Так, решил сделать сайт самостоятельно, думал, что разберусь. В основах вроде как разобрался, но оказалось, что чем дальше в лес, тем толще партизаны. Вообщем сделал меню отдельными ссылками, а не страницами.
Камрады, подсскажите, возможно ли в постоянные ссылки в меню вставить якорь?
Использую функцию wp_nav_menu, надо сделать так, чтобы по клику переход был в заданное место, а не просто на страницу. Попробовал через админпанель. В настройках меню в графе "Текст ссылки" прописал
<a href="/адрес сраницы#anchor">Текст</a>
всё работает, но в итоге в НТML получается двойной тег <a>
Доброго времени суток! Помогите дилетанту, пожалуйста, решить проблему с классами меню.
Меню вывожу с помощью wp_nav_menu, естественно в тегах генерируется куча ненужных id и
классов. Задача убрать всё, кроме класса родителя, предка и текущей страницы.
В сети нашёл некоторые готовые решения, но в итоге всё-равно получается не то, что надо.
Для того, чтобы убрать лишние ID и классы:
1) Заменяю названия классов, генерируемых автоматически:
function replace_menu_css_class($text) {$my_classes = array(
'menu-item' => '',
'-type-custom'=>'',
'-object-custom'=>'',
'-home'=>'',
'-type-post_type'=>'',
'-object-page'=>'',
'-has-children'=>'page-has-children',
'current-page-ancestor'=>'',
'current-menu-ancestor'=>'',
'current_page_parent'=>'current_parent',
'current-menu-parent'=>'',
'current_page_ancestor'=>'current_ancestor',
'-type-custom'=>'',
'-object-custom'=>'',
'current-'=> 'current-page',
);
$text = str_replace(array_keys($my_classes), $my_classes, $text);
return $text;
}
add_filter( 'nav_menu_css_class', 'replace_menu_css_class' );
2) Добавил новый класс Walker. Взял кастомный и просто удалил оттуда некоторые элементы таким образом:
- в этом куске удалил третью строчку, которая, как я понял отвечает за вывод класса menu-item-ID страницы
- полностью удалил кусок, отвечающий за генерацию ID
- в этом куске удалил . $id, чтобы исключить вывод ID тега <li>
В итоге получилось так:
class True_Walker_Nav_Menu extends Walker_Nav_Menu {
/**
* @see Walker::start_el()
* @since 3.0.0
*
* @param string $output
* @param object $item Объект элемента меню, подробнее ниже.
* @param int $depth Уровень вложенности элемента меню.
* @param object $args Параметры функции wp_nav_menu
*/
function start_el(&$output, $item, $depth, $args) {
global $wp_query;
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
/*
* Генерируем строку с CSS-классами элемента меню
*/
$class_names = $value = '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
// функция join превращает массив в строку
$class_names = join(' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
$class_names = ' class="' . esc_attr( $class_names ) . '"';
/*
* Генерируем элемент меню
*/
$output .= $indent . '<li' . $value . $class_names .'>';
// атрибуты элемента, title="", rel="", target="" и href=""
$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 ) .'"' : '';
// ссылка и околоссылочный текст
$item_output = $args->before;
$item_output .= '<a'. $attributes .'>';
$item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
$item_output .= '</a>';
$item_output .= $args->after;
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
}
}
HTML получается почти правильный
Не устраивает то, что при отсутствии класса у тега <li> остаётся <li class=" ">, т.е. цель убрать class=" ", если у <li> нет класса и убрать пробелы после первой кавычки, если <li> имеет классы.
Понимаю, что где-то в этой части кода надо править
Но как сделать не знаю.
Может у кого-то есть решение по этому вопросу? Спасибо.
а javascript ом не хочешь попробывать сделатЬ?
Можно попробовать, но я не шарю🤣 Я ж не спец. Так, решил сделать сайт самостоятельно, думал, что разберусь. В основах вроде как разобрался, но оказалось, что чем дальше в лес, тем толще партизаны. Вообщем сделал меню отдельными ссылками, а не страницами.
Камрады, подсскажите, возможно ли в постоянные ссылки в меню вставить якорь?
Использую функцию wp_nav_menu, надо сделать так, чтобы по клику переход был в заданное место, а не просто на страницу. Попробовал через админпанель. В настройках меню в графе "Текст ссылки" прописал
всё работает, но в итоге в НТML получается двойной тег <a>Гугл по этому поводу молчит. Как сделать правильно? Или хочу невозможного?