AntonEssential
@AntonEssential

Как сделать кастомное меню в Wordpress?

Добрый день, стоит задача сделать кастомное меню, функция wp_nav_menu(); выводит определенную структуру меню, т.е. контейнер обертка > ul > li > a, моя структура отличается, в функцию wp_nav_menu(); я могу передать определенные параметры такие как класс идентификатор.
Как изменить структуру меню? например: div>div>div>a
  • Вопрос задан
  • 3859 просмотров
Решения вопроса 1
ykushnir
@ykushnir
Профессиональный Wordpress разработчик.
Как вариант, можно просто зная ID меню получить массив ссылок, а потом уже делать с ним всё, что понадобится. Например: (взято из реального проэкта - ID 'top', прохожусь по всем пунктам два раза. Первый - ищу элементы первого уровня, второй - второго. Но это в случае, если мы знаем наверняка, что будет только два уровня меню. Если из много, нужно использовать рекурсию).

function render_top_menu() {

	$locations  = get_nav_menu_locations();
	$menu       = wp_get_nav_menu_object( $locations['top'] );
	$menu_items = wp_get_nav_menu_items( $menu->term_id );

	$display_menu = array();


	foreach ( $menu_items as $menu_item ) {
		if ( $menu_item->menu_item_parent == 0 ) {
			$display_menu[ $menu_item->ID ] = array(
				'title' => get_the_title( $menu_item->object_id ),
				'url'   => get_permalink( $menu_item->object_id )
			);
		}
	}


	foreach ( $menu_items as $menu_item ) {
		if ( $menu_item->menu_item_parent !== '0' ) {
			$display_menu[ $menu_item->menu_item_parent]['child'][] = array(
				'title' => get_the_title( $menu_item->object_id ),
				'url'   => get_permalink( $menu_item->object_id )
			);
		}
	}

	echo '<div class="header-menu">';

	foreach ( $display_menu as $display_menu_item ) {
		echo '<div class="header-menu-item"><a href="' . $display_menu_item['url'] . '"class="header-menu-link"><span>' . $display_menu_item['title'] . '</span></a>';

		if ( is_array( $display_menu_item['child'] ) ) {
			echo '<div class="header-menu-drop"><div class="header-menu-drop-items">';
			foreach ( $display_menu_item['child'] as $submenu ) {
				echo '<a href="' . $submenu["url"] . '" class="header-menu-drop-item">' . $submenu["title"] . '</a>';
			}
			echo '</div></div>';
		}

		echo '</div>';
	}

	echo '</div>';

}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AntonEssential
@AntonEssential Автор вопроса
Вроде бы как нашел, custom walker function
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы