Все о WordPress: плагины, шаблоны, темы и настройка

Выпадающее меню в WordPress

Выпадающее меню в WordPress
Выпадающее меню в представлении не нуждается, все давно уже поняли его преимущества. Удобный способ навигации, отражающий иерархию страниц сайта. И сегодня мы поговорим о том как создать такое меню в своем wordpress-блоге, и как назначить ему различные стили и визуальные эффекты.

Начнем с самого простого, как создать выпадающее меню в Wordpress. Думаю большинству пользователей это известно, но все же в двух словах объясню. Выпадающее меню – это меню в котором находятся подчиненные страницы, поэтому для того чтобы его создать, вам, в своем блоге нужно создать как минимум одну родительскую страницу, и одну дочернюю.

Чтобы не продолжать беспредметный разговор, давайте представим, что у нас в блоге есть обычная статическая страница под названием "О блоге", вот для нее мы и создадим три подчиненные страницы: "об авторе", "контакты", "партнерам".

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

Выпадающее меню в WordPress

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

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

Так вот если такое произошло и с вами, далее я расскажу, как формируется красивое выпадающее меню, на примере всем знакомого шаблона "WordPress Default".

1. Первое, что мы сделаем, это расположим меню сразу после шапки, а для этого сначала нужно удалить его из сайдабара. Открываем файл sidebar.php, находим в нем строчку

1
<?php wp_list_pages('title_li=<h2>Pages</h2>'); ?>

и удаляем ее

2. Теперь расположим меню ниже заголовка, для этого открываем файл header.php, и после блока "headerimg", вставляем следующие строки:

1
2
3
<div id="menu">
<?php wp_list_pages('title_li=') ?>
</div>

Здесь параметр title_li=, с пустым значением, означает что меню выведется без предваряющей надписи "Страницы".

3. Теперь добавим стилей для нашего меню, чтобы оно выглядело соответственно общему дизайну темы, в файле style.css:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*общий стиль блока меню*/
#menu {
height: 30px;
background: #4182b8;
margin: 5px 20px 100px 20px;
clear: both;
font-size: 14px;
}

/*стиль ссылок в меню*/
#menu li a{
color: #fff;
display: block;
line-height: 27px;
padding: 0 10px;
}
#menu li a:hover {
background: #07599d;
text-decoration: none;
}

/*стиль для элементов первого уровня, т.е. дочерних страниц*/
#menu li {
list-style: none;
float: left;
}

/*стиль для элементов дочернего меню*/
#menu li ul li {
float: none;
}
#menu ul {
background: #4182b8;
margin: 0; padding: 0;
position: absolute;
z-index: 10;
}

После добавления стилей меню должно выглядеть примерно так:

Выпадающее меню в WordPress

4. Далее было бы неплохо, выделять активные страницы. Это реализуется довольно просто, с помощью CSS:

1
2
3
4
.current_page_item, .current_page_parent{
background: #07599d;
text-decoration: none;
}

Здесь .current_page_item – текущая активная страница (на скриншоте выше это страница "партнерам"), .current_page_parent – это ее родительская страница.

5. Все бы хорошо, но выпадающее меню, на то и названо, чтобы появляться и исчезать, при наведении мыши, а не постоянно отображаться на экране. Поэтому для начала мы спрячем его с помощью CSS, а затем будем показывать с помощью JQuery.

1
2
3
4
5
6
7
8
/*строка display:none прячет выпадающее меню*/
#menu ul{
display: none;
background: #4182b8;
margin: 0; padding: 0;
position: absolute;
z-index: 10;
}

Далее потребуется подключить jquery, к нашему шаблону. Это можно сделать в теге head, файла header.php, следующей строчкой:

1
<script src="wp-includes/js/jquery/jquery.js" type="text/javascript"></script>

Далее добавим код, который позволит отображать дочернее меню, при наведении мыши:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script type="text/javascript">
jQuery(document).ready(function(){

jQuery("#menu li").hover(

function(){
jQuery(this).find('ul').show();
},

function(){
jQuery(this).find('ul').hide();
}
);
});
</script>

В принципе этого достаточно, теперь при наведении мыши к имени страницы, будет отображаться дочернее меню. Но можно пойти дальше, и добавить различные эффекты появления дочернего меню.

6. Эффект медленного появления дочернего меню, делается очень просто, путем изменения высоты, ширины и прозрачности отображаемого блока. Понадобится просто добавить один параметр, к уже написанному коду:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script type="text/javascript">
jQuery(document).ready(function(){

jQuery("#menu li").hover(

function(){
jQuery(this).find('ul').show('slow');
},

function(){
jQuery(this).find('ul').hide();
}
);
});
</script>

Можно добавить эффект появления без прозрачности, вертикальный:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script type="text/javascript">
jQuery(document).ready(function(){

jQuery("#menu li").hover(

function(){
jQuery(this).find('ul').slideDown();
},

function(){
jQuery(this).find('ul').slideUp();
}
);
});
</script>

Если возникла необходимость, отображать выпадающее меню постоянно, если дочерняя страница активна (подходит для вертикального бокового меню), то это делается следующим образом:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script type="text/javascript">
jQuery(document).ready(function(){

if(jQuery("#menu li").hasClass('current_page_parent')){
jQuery("#menu li ul").show();
}

jQuery("#menu li").hover(function(){
jQuery(this).find('ul').show('slow');
},

function(){
if (!jQuery(this).hasClass('current_page_parent')){
jQuery(this).find('ul').hide();
}
}
);
});
</script>

Как видно, выпадающее меню под силу сделать любому пользователю, и его внешний вид полностью зависит от вашей фантазии, и знания эффектов jQuery.
Источник

Предыдущие записи из рубрики Учебник WordPress

28 комментариев

Алексей, 23.06.2009 в 21:33Ответить

Так доступно все описали, что все вышло сразу, спасибо за удовольствие ))

anomalist, 04.08.2009 в 13:03Ответить

но это не для большой вложенности да? если выпадающий пункт сделать родителем другой страницы то менюшка не пашит ))

Deimos, 04.08.2009 в 13:13Ответить

anomalist, не совсем понял сути вопроса :?:

liksunov, 12.08.2009 в 16:33Ответить

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

post, 26.09.2009 в 06:10Ответить

Большое спасибо! Сделал разворачивающееся вертикальное меню в левом виджете для wp e-commerce

crack382, 28.09.2009 в 01:33Ответить

Спасибо за интересную статью - тоже поробую на своём блоге такое сделать! =)

mse, 07.10.2009 в 23:46Ответить

спасибо.
только вод на под странице почему то не работает...

Гран мерси - огромное спасибо!
Описание, идея, воплощение - всё на высшем уровне.
Пришлось немного помучаться с выпадающим меню, но это уже мелочи.
С Уважением
РГ

Deimos, 08.10.2009 в 12:54Ответить

DSL Эксперт, незачто, рад что Вам понравилось ;) mse, все сделали по инструкции?

Артём, 08.11.2009 в 11:21Ответить

спасибо, ваш вариант больше всего понравился.

но бок появился. недавно ввёл постоянные ссылки, и после этого меню работает только на главной странице.
в чём бок? может какой код заменить надо?

fokk, 25.11.2009 в 11:11Ответить

Есть вопрос.. в ie6 получается каша... что делать?

Jane, 04.12.2009 в 00:13Ответить

у меня пробема возникла, после добавления стиля меню (когда оно все отображается и не прячется), я добавила дальше как и было написано display: none (так же как и в примере), и у меня теперь просто меню не видно вообще - строчка висит пустая, никаких названий, никакого выпадания, ничего. Делала на теме amazing grace - то есть само меню не создавала. Подскажите как быть?

Артем, 05.01.2010 в 17:27Ответить

Меню работает только на главной или на всех страницах если не использовать ЧПУ. В чем проблема?

Deimos, 05.01.2010 в 21:23Ответить

Артем, должно на всех работать, попробуйте вместо строки:

1
<script src="wp-includes/js/jquery/jquery.js" type="text/javascript"></script>

написать:

1
<script type='text/javascript' src='http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js?ver=1.3.2'></script>

Может поможет :-)

Артем, 05.01.2010 в 23:18Ответить

Спасибо, так работает. Насколько я понял это у меня jquery.js глючит. Вот еще бы знать как это исправить, чтобы не грузить постоянно google?
И у меня еще один вопрос. Можно ли как-нибудь сделать так, чтобы меню было не слева, а по центру страницы?

Флетчер, 06.01.2010 в 17:03Ответить

Статья отличная. У меня вроде все получилось. Единственное что непонятно - это как сделать вывод вкладок второго уровня, как показано на картинке вначале поста?

Ольга, 10.01.2010 в 13:47Ответить

Здравствуйте! у меня та же пробема, что и у jane (04.12.2009) после добавления стиля меню (когда оно все отображается и не прячется), я добавила дальше как и было написано display: none (так же как и в примере), и у меня теперь просто меню не видно вообще - строчка висит пустая, никаких названий, никакого выпадания, ничего. Подскажите, что не так?

Sanya, 25.01.2010 в 02:26Ответить

Спасибо автору за статейку.
Все настроил, работает.
Вопрос только есть один у меня: когда активна одна из дочерних страниц, то выпадающее меню на ее родительской странице не появляется. Т.е. получается нужно уходить с этой страницы чтобы посмотреть что там есть еще в списке выпадающего меню.
Надеюсь понятно объяснил.
Заранее спасибо за ответ.

Deimos, 25.01.2010 в 13:39Ответить

Sanya, попробуйте сделать так, вместо строки:

1
<script src="wp-includes/js/jquery/jquery.js" type="text/javascript"></script>

написать:

1
<script type='text/javascript' src='http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js?ver=1.3.2'></script>

Может поможет :-)

Елена, 27.01.2010 в 16:27Ответить

Очень доступно и интересно написано, долго мучалась с проблемой отображения меню, нашла вашу статью. понравилось, только вопрос, как сделать вертикальную ориентацию? Может вопрос глупый, но какой есть)))Помогите, пожааааааалуйста:)

Mihail Svobodniu, 03.02.2010 в 15:00Ответить

Как то не так все это получается =/
А самое главное выпадающее меню делают либо шаблон для гс либо делают только на рубрики! =(

Sanya, 04.02.2010 в 18:34Ответить

Deimos, Спасибо, работает.
у меня еще один вопрос :)
в IE6 меню не работает, т.е. отображается не должным образом - в столбик. Может у кого была такая проблема???
Как оно выглядит в IE6 посмотреть можно здесь http://amatik.ru/error.JPG
Заранее Спасибо!

Флетчер, 04.02.2010 в 19:02Ответить

Проблемы свою решил переписав стили:
#menu, #menu ul {margin:0; padding:0; list-style-type:none; list-style-position:outside; position:relative; line-height:1.5em; z-index:300; width:100%;font-weight:bold;}
#menu a {display:block;margin: 0 2px 0 2px;padding:0.25em 0.5em; color:#fff; border-right:1px solid #D8EDFB;border-left:1px solid #D8EDFB; text-decoration:none; background: #1D4583;filter:alpha(opacity=80);-moz-opacity:.8;opacity:.8;}
#menu a:hover {background: #194C8B;color:#fff;filter:alpha(opacity=100);-moz-opacity:1;opacity:1;}
#menu li {float:left;position:relative;}
#menu ul {position:absolute; display:none; width:12em; top:1.9em;}
#menu ul a {border-bottom:1px solid #D8EDFB;}
#menu li ul { width:14.1em;}
#menu li ul a {width:12em;height:auto;float:left;}
#menu ul ul {top:auto;}
#menu li ul ul {left:12em; margin:0px 0 0 10px;}
#menu li:hover ul ul, #menu li:hover ul ul ul, #menu li:hover ul ul ul ul {display:none;}
#menu li:hover ul, #menu li li:hover ul, #menu li li li:hover ul, #menu li li li li:hover ul {display:block;}

А библиотеку JQuery по-моему можно также продключить функцией

Sanya, 08.02.2010 в 17:56Ответить

Флетчер, Спасибо!
А конкретно что нужно для нормального отображения в IE6 в этом случае не подскажете?, чтобы не переписывать все стили.

Artemka, 08.02.2010 в 23:04Ответить

Во всех примерах меню позиционируется абсолютно от края экрана. Мой шаблон имеет выравнивание по центру.. и соответственно, в зависимости от разрешения монитора, центр плавает.
Как отцентрованть горизонтальное меню с выпадающими вниз подпунктами?
Подскажите плиз :))

Флетчер, 09.02.2010 в 18:48Ответить

Artemka, я например устанавливаю код вызова меню в header обычно сразу после этой строчки

1
<div id="header">

в зависимости от темы название стиля может меняться. а так как хедер у нас позиционирован как задумано темой то и меню будет тоже вести себя аналогично.
Единственно что бывает надо подправить так это отступы сверху и сбоку.
Пробовал на разных темах, при масштабировании у меня всё Ок.

Artemka, 10.02.2010 в 09:39Ответить

Флетчер, спасибо за ответ, но я именно туда меню и вставляю... шапка по центру, как и остальные части шаблона..
но само меню привязано к левому краю монитора и с отступами не угадаешь, т.к. у всех разное разрешение.
Я так понимаю все дело в этой строчке CSS:
position: absolute;
Но если позиционирование делать по-другому, меню разъезжается при наведении мышкой.

Alex_CH, 11.02.2010 в 13:03Ответить

post, расскажите как сделать выпадающее меню в виджете для e-commerce. А еще лучше дайте пхп код виджета )

Оставить ответ

Топ комментаторов

Спасибо Вам за Ваши комментарии!