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
Використання не знайдено.
