Полезные сниппеты для меню WordPress

Разработка кастомного меню на WordPress — звучит немного пугающе, но зачастую плагины для меню увеличивают не только ваше общее количество плагинов, но уменьшают скорость загрузки сайта и не позволяют отобразить меню точно в соответствии с дизайном. Мы даем вам сниппеты для вывода меню в WordPress, которые мы часто используем.

Отображение меню в кастомной теме WordPress.

Чаще всего для вывода меню в теме создают location(s). Оразец кода ниже нужно поместить в файл functions.php.


/**
 * Register for theme menu.
 */
function theme_register_menu() {
	register_nav_menu( 'primary', 'Primary Menu' );
	register_nav_menu( 'settings', 'Settings Menu' );
}
add_action( 'after_setup_theme', 'theme_register_menu', 11 );

Далее для вывода меню в шаблонах темы (обычно header.php) нужно использовать код:


/**
 * Displaying the theme menu.
 */
$args = array(
	'menu'              => 'primary',
	'menu_id'           => 'main_menu',
	'theme_location'    => 'primary',
	'container'         => ''
);
wp_nav_menu( $args );

Чтобы удалить ссылки из меню или вывести пункты меню как текст:

Все сниппеты ниже нужно вставлять в файл functions.php.


/**
 * Adding span to a menu. 
 * Class text allows wrapping menu item within span tag instead of a tag.
 * Class disable allows to remove menu item wrapper at all.
 */
function span_to_nav_menu( $item_output, $item, $depth, $args ) {
	if ( isset( $item->classes ) && !empty( $item->classes ) ) {
		if ( in_array( 'text', (array) $item->classes ) ) {
			$item_output = '<span class="title">'. $item->title .'</span>';
		} elseif ( in_array( 'disable', (array) $item->classes ) ) {
			$item_output = '';
		}
	}
	return $item_output;
}
add_filter( 'walker_nav_menu_start_el', 'span_to_nav_menu', 10, 4 );

Разрешить вставлять шорткоды к заглавия пунктов меню в WordPress нужно использовать код:


/**
 * Allow shortcodes in a menu in the title.
 */
add_filter('wp_nav_menu_items', 'do_shortcode');

Добавляем HTML код или шорткоды в описание пунков меню в WordPress сниппетом:


/**
 * Allow HTML and shortcodes in a menu in the description.
 */
remove_filter( 'nav_menu_description', 'strip_tags' );
function my_plugin_wp_setup_nav_menu_item( $menu_item ) {
  if ( ! is_admin() && isset( $menu_item->post_type ) ) {
    if ( 'nav_menu_item' == $menu_item->post_type ) {
      $menu_item->description = do_shortcode($menu_item->post_content);
    }
  }

  return $menu_item;
}
add_filter( 'wp_setup_nav_menu_item', 'my_plugin_wp_setup_nav_menu_item' );

Этот код добавляет дополнительную обертку сабменю.

Не забудьте указать walker в агрументах при выводе меню: ‘walker’ => new Custom_Sublevel_Walker


/**
 * Extending menu walker. Allow to wrap submenus. Just an example.
 */
class Custom_Sublevel_Walker extends Walker_Nav_Menu
{
    function start_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\t", $depth);
        if ( $depth == 0 ) {
        	$output .= "\n$indent<div class='sub-menu-wrap first_level_menu'><ul class='sub-menu row'>\n";
        } elseif( $depth == 1 ) {
        	$output .= "\n$indent<div class='sub-menu-wrap second_level_menu'><ul class='sub-menu row'>\n";
        } elseif( $depth == 2 ) {
        	$output .= "\n$indent<div class='sub-menu-wrap third_level_menu'><ul class='sub-menu'>\n";
        } else {
        	$output .= "\n$indent<div class='sub-menu-wrap fourth_level_menu'><ul class='sub-menu'>\n";
        }
    }
    function end_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\t", $depth);
        $output .= "$indent</ul></div>\n";
    }
}

Надеемся, что сниппеты для меню WordPress, которые мы привели в этой статье, окажутся для вас полезными и вы оставите нам хороший отзыв) Если же нет, то расскажите о вашей задаче и мы попробуем вам помочь.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *