Хуки: фильтры и действия
Фильтры и действия WordPress, через которые меню меняется кодом: в functions.php дочерней темы или в своём небольшом плагине.
| Хук | Тип | Назначение |
|---|---|---|
eldermenu_is_mobile | фильтр | Считать ли устройство мобильным. $scenario: disable_on_mobile, disable_on_desktop, disable_submenu_on_mobile, disable_images_mobile, display_retractors или false. |
eldermenu_nav_menu_args | фильтр | Аргументы wp_nav_menu() перед выводом мегаменю. |
eldermenu_configuration_id | фильтр | Какую конфигурацию использовать для этого вывода меню. Можно, например, показать другую конфигурацию на отдельных страницах. |
eldermenu_display_item | фильтр | Показывать ли пункт. Верните false, чтобы скрыть. |
eldermenu_submenu_type | фильтр | Тип подменю пункта: mega, flyout, stack… |
eldermenu_dynamic_posts_args | фильтр | Аргументы WP_Query/get_posts() для «Динамических записей». |
eldermenu_dynamic_terms_args | фильтр | Аргументы get_terms() для «Динамических терминов». |
eldermenu_dp_title | фильтр | Заголовок записи в «Динамических записях». |
eldermenu_dp_subcontent | фильтр | Подконтент под заголовком динамической записи (для варианта «Пользовательский»). |
eldermenu_dt_subcontent | фильтр | Подконтент динамического термина. |
eldermenu_dt_image | фильтр | Картинка динамического термина (ID вложения). Например, миниатюра категории товаров из своего метаполя. |
eldermenu_dp_after / eldermenu_dt_after | фильтр | HTML всех динамических пунктов перед выводом. |
eldermenu_dp_custom_taxonomies | фильтр | Какие пользовательские таксономии доступны в фильтре «Динамических записей». |
eldermenu_item_image | фильтр | Подменить HTML картинки пункта (пустая строка — картинка по настройкам). |
eldermenu_badge_content | фильтр | Текст бейджа. Можно вычислять на лету: количество новых записей, скидку. |
eldermenu_anchor_attributes | фильтр | Атрибуты ссылки пункта (href, class, target, rel, data-атрибуты). |
eldermenu_item_atts | фильтр | Атрибуты элемента li пункта. |
eldermenu_row_atts | фильтр | Атрибуты ряда. |
eldermenu_icon_custom_class | фильтр | Классы иконки пункта. |
eldermenu_item_layouts / eldermenu_item_layout_ops | фильтр | Список макетов пункта и их подписи в панели — для своих макетов. |
eldermenu_item_layout_pieces | фильтр | Части макета (image, icon, title, description) перед сборкой пункта. Так макеты WooCommerce добавляют цену и бейдж. |
eldermenu_menu_title | фильтр | Название меню для {{menu_title}} и ARIA-меток. |
eldermenu_mobile_header / eldermenu_mobile_footer | фильтр | HTML шапки и подвала мобильной панели. |
eldermenu_toggle_class / eldermenu_toggle_html_atts | фильтр | Классы и атрибуты кнопки мобильного меню. |
eldermenu_custom_styles | фильтр | Весь сгенерированный CSS (массив частей) перед выводом в <head>. |
eldermenu_json_data | фильтр | Настройки, передаваемые скрипту меню (eldermenu_data): контрольная точка, задержки hover intent и др. |
eldermenu_op | фильтр | Любое значение настройки при чтении. Позволяет менять настройки кодом без записи в базу. |
eldermenu_background_image_size | фильтр | Размер фоновой картинки подменю (по умолчанию full). |
eldermenu_registered_fonts | фильтр | Список шрифтов в «Шрифт меню». |
eldermenu_register_fonts | действие | Место для регистрации своих шрифтов функцией eldermenu_register_font(). |
eldermenu_register_icons | действие | Регистрация своего набора иконок функцией eldermenu_register_icons( $group, $args ) — он появится в окне выбора иконки. |
eldermenu_after_menu_item_save | действие | После сохранения настроек пункта в панели MegaMenu. |
wp-content/mu-plugins/megamenu-tweaks.php — он не зависит от темы и не пропадёт при её обновлении.eldermenu_is_mobile
Фильтр. Считать ли устройство мобильным. $scenario: disable_on_mobile, disable_on_desktop, disable_submenu_on_mobile, disable_images_mobile, display_retractors или false.
Аргументы: $is_mobile, $scenario
<?php
add_filter( 'eldermenu_is_mobile', function ( $is_mobile, $scenario ) {
// Планшеты считаем компьютерами
if ( isset( $_SERVER['HTTP_USER_AGENT'] ) && stripos( $_SERVER['HTTP_USER_AGENT'], 'iPad' ) !== false ) {
return false;
}
return $is_mobile;
}, 10, 2 );eldermenu_nav_menu_args
Фильтр. Аргументы wp_nav_menu() перед выводом мегаменю.
Аргументы: $args, $config_id
eldermenu_configuration_id
Фильтр. Какую конфигурацию использовать для этого вывода меню. Можно, например, показать другую конфигурацию на отдельных страницах.
Аргументы: $config_id, $args
<?php
add_filter( 'eldermenu_configuration_id', function ( $config_id, $args ) {
return is_page( 'landing' ) ? 'landing' : $config_id;
}, 10, 2 );eldermenu_display_item
Фильтр. Показывать ли пункт. Верните false, чтобы скрыть.
Аргументы: $display, $walker, $element, $max_depth, $depth, $args, $item
<?php
// Пункт с классом only-logged-in виден только вошедшим пользователям
add_filter( 'eldermenu_display_item', function ( $display, $walker, $element ) {
if ( in_array( 'only-logged-in', (array) $element->classes, true ) && ! is_user_logged_in() ) {
return false;
}
return $display;
}, 10, 3 );eldermenu_submenu_type
Фильтр. Тип подменю пункта: mega, flyout, stack…
Аргументы: $type, $item, $depth, $args
eldermenu_dynamic_posts_args
Фильтр. Аргументы WP_Query/get_posts() для «Динамических записей».
Аргументы: $query_args, $item_id
<?php
// Только записи с метаполем featured = 1
add_filter( 'eldermenu_dynamic_posts_args', function ( $args, $item_id ) {
$args['meta_key'] = 'featured';
$args['meta_value'] = '1';
return $args;
}, 10, 2 );eldermenu_dynamic_terms_args
Фильтр. Аргументы get_terms() для «Динамических терминов».
Аргументы: $term_args, $item_id
eldermenu_dp_title
Фильтр. Заголовок записи в «Динамических записях».
Аргументы: $title, $item_id, $post_id
eldermenu_dp_subcontent
Фильтр. Подконтент под заголовком динамической записи (для варианта «Пользовательский»).
Аргументы: $html, $post, $item_id
<?php
// У пункта «Динамические записи» выберите «Динамический подконтент: Пользовательский»
add_filter( 'eldermenu_dp_subcontent', function ( $html, $post, $item_id ) {
if ( function_exists( 'wc_get_product' ) && 'product' === $post->post_type ) {
$product = wc_get_product( $post->ID );
return $product ? 'Артикул: ' . esc_html( $product->get_sku() ) : $html;
}
return $html;
}, 10, 3 );eldermenu_dt_subcontent
Фильтр. Подконтент динамического термина.
Аргументы: $html, $term, $item_id
eldermenu_dt_image
Фильтр. Картинка динамического термина (ID вложения). Например, миниатюра категории товаров из своего метаполя.
Аргументы: $image_id, $item_id, $term
eldermenu_dp_after / eldermenu_dt_after
Фильтр. HTML всех динамических пунктов перед выводом.
Аргументы: $html, $item_id, $args
eldermenu_dp_custom_taxonomies
Фильтр. Какие пользовательские таксономии доступны в фильтре «Динамических записей».
Аргументы: $taxonomies
eldermenu_item_image
Фильтр. Подменить HTML картинки пункта (пустая строка — картинка по настройкам).
Аргументы: $html, $menu_item
eldermenu_badge_content
Фильтр. Текст бейджа. Можно вычислять на лету: количество новых записей, скидку.
Аргументы: $content, $item_id, $item
<?php
// Бейдж «Новое», если в рубрике пункта есть записи моложе 7 дней
add_filter( 'eldermenu_badge_content', function ( $content, $item_id, $item ) {
if ( 'category' === $item->object ) {
$fresh = get_posts( array( 'cat' => $item->object_id, 'date_query' => array( array( 'after' => '7 days ago' ) ), 'fields' => 'ids', 'numberposts' => 1 ) );
if ( $fresh ) {
return 'Новое';
}
}
return $content;
}, 10, 3 );eldermenu_anchor_attributes
Фильтр. Атрибуты ссылки пункта (href, class, target, rel, data-атрибуты).
Аргументы: $atts, $type, $item_id, $object, $object_id
<?php
// Внешние ссылки меню открываются в новой вкладке
add_filter( 'eldermenu_anchor_attributes', function ( $atts ) {
if ( ! empty( $atts['href'] ) && strpos( $atts['href'], home_url() ) !== 0 && strpos( $atts['href'], 'http' ) === 0 ) {
$atts['target'] = '_blank';
$atts['rel'] = 'noopener';
}
return $atts;
} );eldermenu_item_atts
Фильтр. Атрибуты элемента li пункта.
Аргументы: $atts, $item_id, $item, $args, $depth
eldermenu_row_atts
Фильтр. Атрибуты ряда.
Аргументы: $atts, $item_id, $item, $args, $depth
eldermenu_icon_custom_class
Фильтр. Классы иконки пункта.
Аргументы: $icon_classes, $item_id
eldermenu_item_layouts / eldermenu_item_layout_ops
Фильтр. Список макетов пункта и их подписи в панели — для своих макетов.
Аргументы: $layouts / $ops
eldermenu_item_layout_pieces
Фильтр. Части макета (image, icon, title, description) перед сборкой пункта. Так макеты WooCommerce добавляют цену и бейдж.
Аргументы: $pieces, $layout, $post_id, $config_id
eldermenu_menu_title
Фильтр. Название меню для {{menu_title}} и ARIA-меток.
Аргументы: $title, $menu_id, $config_id, $item
eldermenu_mobile_header / eldermenu_mobile_footer
Фильтр. HTML шапки и подвала мобильной панели.
Аргументы: $html, $config_id
<?php
add_filter( 'eldermenu_mobile_footer', function ( $html, $config_id ) {
return $html . '<p class="em-mobile-phone"><a href="tel:+70000000000">+7 (000) 000-00-00</a></p>';
}, 10, 2 );eldermenu_toggle_class / eldermenu_toggle_html_atts
Фильтр. Классы и атрибуты кнопки мобильного меню.
Аргументы: $class, $config_id / $atts, $config_id, $args
eldermenu_custom_styles
Фильтр. Весь сгенерированный CSS (массив частей) перед выводом в <head>.
Аргументы: $styles
eldermenu_json_data
Фильтр. Настройки, передаваемые скрипту меню (eldermenu_data): контрольная точка, задержки hover intent и др.
Аргументы: $data
<?php
add_filter( 'eldermenu_json_data', function ( $data ) {
$data['intent_delay'] = 500; // подменю дольше не закрывается
return $data;
} );eldermenu_op
Фильтр. Любое значение настройки при чтении. Позволяет менять настройки кодом без записи в базу.
Аргументы: $value, $option, $section
<?php
// Липкое меню только на главной
add_filter( 'eldermenu_op', function ( $value, $option, $section ) {
if ( 'sticky' === $option && 'main' === $section && ! is_front_page() ) {
return 'off';
}
return $value;
}, 10, 3 );eldermenu_background_image_size
Фильтр. Размер фоновой картинки подменю (по умолчанию full).
Аргументы: $size, $attachment_id, $item_id
eldermenu_registered_fonts
Фильтр. Список шрифтов в «Шрифт меню».
Аргументы: $fonts
eldermenu_register_fonts
Действие. Место для регистрации своих шрифтов функцией eldermenu_register_font().
<?php
add_action( 'eldermenu_register_fonts', function () {
eldermenu_register_font( 'golos', array(
'label' => 'Golos Text',
'stack' => "'Golos Text', sans-serif",
'css' => get_stylesheet_directory_uri() . '/fonts/golos/font.css', // @font-face с вашими файлами
) );
} );eldermenu_register_icons
Действие. Регистрация своего набора иконок функцией eldermenu_register_icons( $group, $args ) — он появится в окне выбора иконки.
<?php
add_action( 'eldermenu_register_icons', function () {
eldermenu_register_icons( 'my-icons', array(
'title' => 'Иконки сайта',
'class_prefix' => 'myicon ',
'iconmap' => array(
'myicon-delivery' => array( 'title' => 'Доставка', 'terms' => 'доставка курьер' ),
'myicon-gift' => array( 'title' => 'Подарок', 'terms' => 'подарок акция' ),
),
) );
}, 20 );
// CSS самих иконок (.myicon-delivery::before …) подключите в теме.eldermenu_after_menu_item_save
Действие. После сохранения настроек пункта в панели MegaMenu.
Аргументы: $item_id