Как добавить иконки в меню WordPress

В одной из предыдущих статей я рассмотрел создание меню WordPress и его настройка. Сегодня, в продолжении темы меню WordPress, рассмотрим дополнительные возможности, с помощью которых можно добавить иконки к пунктам меню. В результате мы получим такой вывод меню на сайте.

Шаг 1.

Создание меню

Если у вас еще нет меню на сайте, то необходимо его создать.

Откройте в админке сайта раздел Внешний вид > Меню. Нажмите ссылку «создайте новое меню». Выберите нужную область отображения и добавьте в меню пункты.

 

Шаг 2.

Добавление php-кода

Для добавления иконок к пунктам мы будем использовать хук wp_nav_menu_objects. Он позволяет изменять список объектов пунктов меню, перед тем, как HTML-код меню будет сгенерирован.

Чтобы иконки добавлялись только к меню в шапке, нужно добавить дополнительную проверку.

Предварительный код выглядит так

add_filter( 'wp_nav_menu_objects', 'add_menu_items_icon', 10, 2 );

function add_menu_items_icon( $items, $args ) {
	
	// Добавляем иконки только для меню primary
	if( $args->theme_location == 'primary' ) {
		foreach( $items as $item ) {
			// здесь будем добавлять иконки к меню
		}
	}
	
	return $items;
}

Этот код добавляем в файл functions.php.

Если вы регулярно обновляете тему, то для изменений файла functions.php используйте дочернюю тему.

Шаг 3.

Добавление иконок

Рассмотрим 3 варианта добавления иконок в меню:

  1. С помощью иконок Dashicons
  2. Через загрузку svg иконок в медиатеку
  3. С помощью плагина ACF

Добавление иконок Dashicons

Библиотека иконок Dashicons идет в WordPress из коробки. Нам нужно только подключить css скрипт в лицевой части сайта.

В functions.php добавьте скрипт подключения стилей

add_action( 'wp_enqueue_scripts', 'enqueue_style_dashicons' );

function enqueue_style_dashicons() {
	wp_enqueue_style( 'dashicons' );
}

Теперь перейдите на сайт Dashicons и с помощью поиска найдите нужную иконку. Скопируйте название иконки.

А теперь вернемся в раздел Внешний вид > Меню. Вверху страницы откройте вкладку Настройки экрана и активируйте чекбокс Описание.

В настройках каждого пункта меню появилось новое текстовое поле. В поле Описание вставьте название иконки и сохраните изменения.

Таким образом добавляем в описание каждого пункта меню название иконки.

Теперь вернемся к php коду, который мы добавляли на шаге 2. В код добавляем вывод дополнительного html.

add_filter( 'wp_nav_menu_objects', 'add_menu_items_icon', 10, 2 );

function add_menu_items_icon( $items, $args ) {
	
	// Добавляем иконки только для меню primary
	if( $args->theme_location == 'primary' ) {
		foreach( $items as $item ) {
			if( $item->description ) {
				$item->title = '<span class="dashicons '. $item->description .'"></span>' . $item->title;
			}
		}
	}
	
	return $items;
}

Обновляем страницу браузера и получаем итоговый результат

Иконки добавлены, но "прилипли" к тексту. Добавим стилей, чтобы навести визуальный порядок.

.menu-item .dashicons{
    margin-right: 6px;
    font-size: 18px;
}

Чуть уменьшил размер иконок и добавил отступ. Стало гораздо лучше 🙂

Иконки Dashicons были рассмотрены в качестве примера. Аналогичным образом вы можете подключить любую библиотеку иконок и добавлять их к пунктам меню.

Добавление иконок через Медиатеку

Теперь рассмотрим универсальный способ добавления иконок. Он позволяет добавлять абсолютно любые иконки и не требует подключения сторонних скриптов и стилей.

Если вы планируете загружать svg иконки, то сначала нужно включить svg в WordPress.

Откройте медиатеку WordPress и загрузите нужные иконки.

Чтобы добавить эти иконки в меню, надо получить ID каждой картинки. В моем случае, для значка домика ID=1511.

Переходим в настройки меню Внешний вид > Меню и в описание каждого пункта добавляем ID иконки.

Далее добавляем php-код. Выводим тег img с помощью функции wp_get_attachment_image.

add_filter( 'wp_nav_menu_objects', 'add_menu_items_icon', 10, 2 );

function add_menu_items_icon( $items, $args ) {
	
	// Добавляем иконки только для меню primary
	if( $args->theme_location == 'primary' ) {
		foreach( $items as $item ) {
			if( $item->description ) {
				$item->title = wp_get_attachment_image( $item->description, 'full', true ) . $item->title;
			}
		}
	}
	
	return $items;
}

Дополнительно добавляем стили

.menu-item img{
    margin-right: 6px;
    height: 18px;
    width: 18px;
}

И смотрим конечный результат:

Добавление иконки с помощью плагина ACF

И последний вариант – использование плагина ACF для добавления произвольного поля с загрузкой изображения. С точки зрения удобства, этот способ самый оптимальный и не требует выполнять махинации с полем Описание.

Установите плагин и активируйте его. Далее откройте в админке новый раздел ACF и создайте новую группу полей. В правилах отображения обязательно выберите Элемент меню и название необходимого меню.

Создайте новое поле типа Изображение, которое должно возвращать ID изображения.

Теперь у каждого пункта меню появилась кнопка для загрузки картинки.

Загрузите нужные иконки для каждого пункта и сохраните меню.

С помощью встроенной в плагин ACF функции get_field получим ID изображения и выведем иконку.

add_filter( 'wp_nav_menu_objects', 'add_menu_items_icon', 10, 2 );

function add_menu_items_icon( $items, $args ) {
	
	// Добавляем иконки только для меню primary
	if( $args->theme_location == 'primary' ) {
		foreach( $items as $item ) {
			$icon = get_field( 'icon', $item );
			if( $icon ) {
				$item->title = wp_get_attachment_image( $icon, 'full', true ) . $item->title;
			}
		}
	}
	
	return $items;
}

Сохраняем код и проверяем окончательный результат

  • Готово! Теперь меню на вашем сайте выглядит более привлекательно 🙂