nav_menu_link_attributes
Дозволяє змінити HTML атрибути <a> елементу меню: title, target, rel, href.
За замовчуванням ці атрибути встановлюються в адмінці у розділі редагування меню:
Атрибут href
є посиланням та призначається автоматично на основі вибраного елемента (запис, рубрика тощо) або вказується вручну, якщо вибрано елемент “Довільне посилання”.
Використання
add_filter( 'nav_menu_link_attributes', 'wp_kama_nav_menu_link_attributes_filter', 10, 4); /** * Function for `nav_menu_link_attributes` filter-hook. * * @param array $atts HTML attributes applied to menu menu's `<a>` element, empty strings є ignored. * @param WP_Post $menu_item Текущее меню елемент об'єкта. * @param stdClass $args An object of wp_nav_menu() arguments. * @param int $depth Відомості про меню. Використовується для padding. * * @return array */ function wp_kama_nav_menu_link_attributes_filter( $atts, $menu_item, $args, $depth ){ // Filter... return $atts; }
-
$atts
(масив) HTML атрибути <a> елемент меню. Атрибути з порожніми значеннями не відображаються на екрані.
$title (рядок)
Атрибут title . Наприклад “Цей пункт дуже важливий”.$target (рядок)
Атрибут target . Наприклад_blank
.$ rel (рядок)
Атрибут rel . Наприкладnofollow
.- $href (рядок)
Атрибут href .
-
$item
(WP_Post) Об’єкт поточного меню. Приклад:
-
$args
(stdClass) Об’єкт з аргументами функції wp_nav_menu() . Приклад:
-
$depth
(число) - Рівень пункту меню. Доданий до версії 4.1.0. Використовується для відступів. Верхні пункти меню мають $depth = 0, вкладені у яких $depth = 1 тощо.
Приклади
#1 Відкривати зовнішні посилання в окремій вкладці
add_filter( 'nav_menu_link_attributes', 'change_nav_menu_link_attributes' ); function change_nav_menu_link_attributes( $atts ) { if ( strpos( $atts['href'], home_url() ) === false ) { $atts['target'] = '_blank'; } return $atts; }
#2 Додає атрибут class активному засланню
Цей приклад показує як можна доповнити список класів елемента меню WordPress і додати туди свій клас до поточного активного елемента меню.
// Додаємо класи посиланням add_filter( 'nav_menu_link_attributes', 'filter_nav_menu_link_attributes', 10, 4); function filter_nav_menu_link_attributes( $atts, $item, $args, $depth ) { if ($ item-> current) { $class = 'menu-link - active'; $atts['class'] = isset( $atts['class'] ) ? "{$atts['class']} $class" : $class; } return $atts; }
#3 Зробити всі посилання у меню відносними
Враховуємо, що якщо буде посилання на сторонній сайт wp_make_link_relative(), його потрібно пропустити.
add_filter( 'nav_menu_link_attributes', 'change_nav_menu_atts', 10, 2); function change_nav_menu_atts( $atts, $item ) { $atts['href'] = str_replace( home_url(), '', $item->url ); return $atts; }
#4 Додати до посилань атрибути для відкриття попа на кліку
Нехай у нас є js скрипт, який моніторить посилання з класом js-open-modal
і, якщо на них клікнули, зчитує їх атрибут data-modal
і відкриває попап під таким номером.
/** * Дозволяє посиланням в меню додати клас та номер попапа для його відкриття під час кліку. * Вкажіть у пункту меню в адмінці клас modal-window-1, щоб відкрити попап #1. Змінюючи цифру змінюєте попап. */ add_filter( 'nav_menu_link_attributes', function ( $atts, $menu_item ) { if ( empty( $menu_item->classes ) ) { return $atts; } foreach ( $menu_item->classes as $class ) { if ( strpos( $class, 'modal-window-' ) !== false ) { if ( isset( $atts['class'] ) ) { $atts['class'] .= 'js-open-modal'; } else { $atts['class'] = 'js-open-modal'; } $atts['data-modal'] = preg_replace( '/[^0-9]/', '', $class ); break; } } return $atts; }, 11, 2);
нотатки
- C версії 4.1.0 було додано параметр $depth .
список змін
З версії 3.6.0 | Введено. |
З версії 4.1.0 | The $depth parameter був added. |
Де викликається хук
Де використовується хук у WordPress
Використання не знайдено.