Выпадающее меню в представлении не нуждается, все давно уже поняли его преимущества. Удобный способ навигации, отражающий иерархию страниц сайта. И сегодня мы поговорим о том как создать такое меню в своем wordpress-блоге, и как назначить ему различные стили и визульные эффекты.
Начнем с самого простого, как создать выпадающее меню в WordPress. Думаю большинству пользователей это известно, но все же в двух словах объясню. Выпадающее меню — это меню в котором находятся подчиненные страницы, поэтому для того чтобы его создать, вам, в своем блоге нужно создать как минимум одну родительскую страницу, и одну дочернюю.
Чтобы не продолжать беспредметный разговор, давайте представим, что у нас в блоге есть обычная статическая страница под названием «О блоге», вот для нее мы и создадим три подчиненные страницы: «об авторе», «контакты», «партнерам».
Итак, поочередно, самым обычным способом добавим все три страницы, за исключением того, что в поле родительская страница следует выбрать «О блоге».
После этих, допольно простых действий, вы увидете выпадающее меню у себя в блоге, а вот как оно будет выглядеть, зависит от темы, которую вы используете. Если это одна из тем, идущих в комплекте с WordPress, то ваше меню отобразится в сайдбаре, в виде маркированного списка.
Если используете стороннюю тему, тут все зависит от совести разработчика. Мне часто попадались очень красивые темы, в которых совершенно не было предусмотрено выпадающее меню, вследствии чего после его добавления, шаблон разваливался на части.
Так вот если такое произошло и с вами, далее я расскажу, как формируется красивое выпадающее меню, на примере всем знакомого шаблона «WordPress Default».
1. Первое, что мы сделаем, это расположим меню сразу после шапки, а для этого сначала нужно удалить его из сайдабара. Открываем файл sidebar.php, находим в нем строчку
<?php wp_list_pages('title_li=<h2>Pages</h2>'); ?>
и удаляем ее
2. Теперь расположим меню ниже заголовка, для этого открываем файл header.php, и после блока «headerimg», вставляем следующие строки:
<div id="menu"> <?php wp_list_pages('title_li=') ?> </div>
Здесь параметр title_li=, с пустым значением, означает что меню выведется без предваряющей надписи «Стараницы».
3. Теперь добавим стилей для нашего меню, чтобы оно выглядело соответственно общему дизайну темы, в файле style.css:
/*общий стиль блока меню*/ #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; }
После добавления стилей меню должно выглядеть примерно так:
4. Далее было бы неплохо, выделять активные страницы. В моем блоге и раньше публиковалась статья, на эту тему, правда она не затрагивала дочерних страниц. То есть фактически если мы находимся на дочерней странице, хорошо бы знать, ее родительскую страницу. Это реализуется довольно просто, с помощью CSS:
.current_page_item, .current_page_parent{ background: #07599d; text-decoration: none; }
Здесь .current_page_item
— текущая активная страница (на скриншоте ниже это страница «партнерам»), .current_page_parent
— это ее родительская страница.
5. Все бы хорошо, но выпадающее меню, на то и названо, чтобы появляться и исчезать, при наведении мыши, а не постоянно отображаться на экране. Поэтому для начала мы спрячем его с помощью CSS, а затем будем показывать с помощью JQuery.
/*строка display:none прячет выпадающее меню*/ #menu ul{ display: none; background: #4182b8; margin: 0; padding: 0; position: absolute; z-index: 10; }
Далее потребуется подключить jquery, к нашему шаблону. Это можно сделать в разделе head, до функции , файла header.php, следующей строчкой:
<?php wp_enqueue_script("jquery"); ?>
Далее код, который позволит отображать дочернее меню, при наведении мыши:
<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. Эффект медленного появления дочернего меню, делается очень просто, путем изменения высоты, ширины и прозрачности отображаемого блока. Пондобится просто добавить один параметр, к уже написанному коду:
<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>
Можно добавить эффект появления без прозрачности, вертикальный:
<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>
Если возникла необходимость, отображать выпадающее меню постоянно, если дочерняя страница активна (подходит для вертикального бокового меню), то это делается следующим образом:
<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.
dreamhelg, что-то не могу разобраться с 3-им уровнем… Поможешь?
что именно не получается? и пример, желательно
инструкция на тигго скачать
hyundai click инструкция
В общем, извини, если повторяюсь, просто почему-то когда пытаюсь оставить коммент, сайт навсегда зависает на белой странице, и не понятно, ушло сообщение или нет.
Проблема вот в чём:
http://www.xcom.ru/wordpress/
Пункт меню — мы предлагаем.
Там есть «серверы» и «компьютеры» — это рубрики дочерние от «мы предлагаем»
Чтобы выпадали остальные «серверы х-сом» и . д. их пришлось тоже сделать дочками от «мы предлагаем», потому что, когда внутри «серверы» создаёшь дочек и постишь запись туда, то выпадает только последний уровень.
Ещё подробнее:
создаю рубрику, к примеру, «компьютеры для офиса» внутри «Компьютеры Х-Сом» и помещаю туда запись «компьютер Х-Office Desktop». В этом случае выпадающее меню «мы предлагаем» начинает содержать в себе только «Компьютеры Х-Сом» -> «Компьютеры для офиса», а всё остальное пропадает из выпадающего списка.
судя по описанной проблеме, очень похоже, что вызов рубрик, ограничен до второго уровня, хотелось бы увидеть как в вашем шаблоне выглядит строчка
. Или еще лучше пришлите шаблон, на мыло, если неудобно на рабочем сервере показывать проблемы, я посмотрю локально
Спасибо большое, правда у меня со второго раза только эта менюшка заработала =)
есть одна проблема, при активации ЧПУ и перехода на любую страницу менюшка перестает работать… обидно… если есть время отпишите на почту, помогите пожалуйста
Разобрались с проблемой? Тоже столкнулся с ней.
Да, если что стучитесь в аську, на сайте есть
Пункт 5, меню спряталось, дальше тупик.
по разному устанавливал строку и скрипт.
Проблема со скриптом, покажите как делали
jQuery(document).ready(function(){
jQuery(«#menu li»).hover(
function(){
jQuery(this).find(‘ul’).show();
},
function(){
jQuery(this).find(‘ul’).hide();
}
);
});
<meta http-equiv="Content-Type" conte
Сам код правильный, а вы записали его внутри тегов script?
«Ваша тема вероятно уже включает в себя функцию wp_head, так что убедитесь что вы расположили вызов функции wp_enqueue_script ДО функции wp_head. Теперь вы можете включить вызов своего собственного JQuery JavaScript-файла ПОСЛЕ функции wp_head.»
Из предыдущей статьи.
спс, разобрался
не могу вспомнить, была ли в дефолтной теме в меню, страница»главная», подскажите как её в сабж установить
Используйте для вывода меню функцию:
wp_page_menu('show_home=1');
(конечно же в тегах php)Эта функция выведет все страницы, включая главную.
респект за оперативность.
где эту функцию установить?
спс
скорее всего в файле header.php, там где у вас расположено меню, это зависит от шаблона
http://mobimaster.zabor55.ru/ вот меню, в него нужно «главная» довавить , иначе переходя на страницы потом не вернуца
Не пойму в чем ваша проблема, ищете строчку
wp_list_pages('title_li=')
, и заменяете ее наwp_page_menu('show_home=1')
.Если уж совсем ничего не получится, пришлите мне вашу тему, я могу поставить сама ;)
спс
Помоги плиз вставить в WP тему выпадающее меню, а то по приведенному выше примеру не выходит каменный цветок.
«есть одна проблема, при активации ЧПУ и перехода на любую страницу менюшка перестает работать… обидно… если есть время отпишите на почту, помогите пожалуйста»
такая же проблема, как решить?
в случае с неработающими ЧПУ, проблема была в неправильном подключении jquery в вордпрессе, проверьте. Подключать лучше всего вот так
dreamhelg, подскажите, пожалуйста, по моей ситуации.
Все сделала строго по статье, jquery подключила тоже правильно, однако столкнулась с проблемой.
При открытии страницы меню раскрывается сразу полностью (т.е. сразу в выпадающем виде), а если наведешь (еще не кликая), то подстраницы скрываются. После этого меню, если навести мышкой, уже начинает работать правильно — при наведении выпадают подстраницы. Где я ошиблась?
Очень похоже, что вы забыли скрыть выпадающее меню в CSS. Потому что прежде чем его показать, оно должно быть скрыто. Проверьте, есть ли у выпадающего меню в стилях строка:
display: none;
Спасибо, все работает
стили прописал, в лисе норм отображается, а в ie дочернее меню появляется не под главным, а наползает на него
Для ul прописал position: absolute. На вскидку не можешь предположить что не хватает?
да, назначьте ul, свойство top, с размером высоты меню верхнего уровня.
Сделала всё по порядку в пункте 3, но меню не выглядит в виде синих блоков, а отражается в виде обычных строчных ссылок. к тому же, они смещены с основной полосы вниз, и выглядят некрасиво.
Ещё вопросы (может, проблема в этом):
-#menu li a — это то же самое, что menu a?
-#menu li a: hover — то же, что menu a hover?
-у меня не было в css menu li ul li — его просто нужно было вписать?
Если пункты меню выглядят как текстовые ссылки, значит вы не указали ссылкам свойство
display: block
. По поводу смещения то же самое, недописали что-то в CSS, если у вас не получается с вашим примером, попробуйте сначала полностью скопировать мой, возможно вам это поможет.в эксплоере 6 не хочет работать =(
всё рассыпается =(
что делать?
дайте ссылку, я посмотрю.
пока на этом сайте тестим =)
http://svoi.lufter.ru/
спасибо большое заранее =)
У меня нет под рукой нужных инструментов именно для ие6, но попробуйте назначить такие стили:
#menu li ul li{
display: block;
float: none;
}
#menu li ul{
display: block;
}
Не гарантирую, что это поможет, но нужно пробовать.
а как же поставить у #menu li ul {display:block;} если там стоит «none»
и ещё почему может быть такое что когда загружается страница выпадающие меню видно сразу и только после наведения курсора пропадает? спасибо большое за уделённое время=) вы моя последняя надежда
Если еще не разобрались с меню, пришлите мне шаблон, я посмотрю, что можно сделать.
спасибо большое за понимание
вот ссылка на шаблон
Тема называется siteground-wp38 вот ссылка http://www.wordpressfiles.ru/files-view-2115.html
Заранее благодарен
У меня вроде бы всё получилось, НО выпадающие вкладки второго уровня у меня смещаются и раскрываются вместе с главными. Это вроде нужно прописать в стилях, но я не понял как именно. Не подскажите как быть?
Код в header.php:
<a href="">Главная
Рубрики
Архивы
jQuery(document).ready(function(){
jQuery("#menu li").hover(
function(){
jQuery(this).find('ul').slideDown();
},
function(){
jQuery(this).find('ul').slideUp();
}
);
});
Код в style:
/*общий стиль блока меню*/
#menu{
height: 27px;
margin: 15px 20px 100px 60px;
clear: both;
font-size: 14px;
}
/*стиль ссылок в меню*/
#menu li a{
color: #fff;
display: block;
line-height: 27px;
padding: 0 10px 0 10px;
margin: 0 5px 0 5px;
border: 1px dashed #D8EDFB;
background: #6CBCF2;
font-weight: bold;
filter:alpha(opacity=80);-moz-opacity:.8;opacity:.8;
}
#menu li a:hover{
background: #6CBCF2;
text-decoration: none;
border: 1px solid #D8EDFB;
filter:alpha(opacity=100);-moz-opacity:1;opacity:1;
}
/*стиль для элементов первого уровня, т.е. дочерних страниц*/
#menu li{
list-style: none;
float: left;
}
/*стиль для элементов дочернего меню*/
#menu li ul li{
float: none;
}
/*строка display:none прячет выпадающее меню*/
#menu ul{
display: none;
margin:0;
padding:0;
position: absolute;
}
.current_page_item, .current_page_parent{
text-decoration: none;
}
На главной меню работает отлично! Но вот при переходе на любую другую страницу меню перестает работать. Подскажите куда копать?
Менял все как в примере. Тема travelo. Брал там http://www.free-proxy-list.info/category/russkie-temy-wordpress/strany/ руссифицированную.
Я точно не помню как мы решали такую проблему, но проверьте две вещи:
-грузится ли jquery на других страницах (можно проверить с помощью фаербага)
-правильность подлючения jquery в wordpress, (в одной из моих статей есть пример)
http://www.wp-info.ru/vypadayushhee-menyu-v-wordpress/#comment-1511 вот в общем
Это как раз то, о чем я говорила — правильное подключение jquery в wordpress
Благодарю за помощь оперативность!
dreamhelg у меня такой вопрос.
на сайте http://adoria.com.ua/ в шаблоне предусмотрена выпадающая менюшка, я добавил функцию
#page-bar .current_page_item a, #page-bar .current_page_parent a {
background: #b8db7c;
}
теперь активные страницы таким цветом как я хочу. Но ГЛАВНАЯ страница когда активна не выделяется. Что посоветуете?????
Скорее всего, в вашем шаблоне главная страница не генерируется автоматически, а добавлена статикой. Для того чтобы главная страница генерировалась вместе с остальными автоматически, вам нужно использовать шаблонный тег:
В этом случае, к главной странице также будет добавлятся класс активной страницы
wp_page_menu('titlie_li=&show_home=1')
Спасибо большое. все получилось!!!!!!!!!!!!!!!!!
возник такой вопрос, есть еще под-подменю, т.е. получается многоуровневое меню, как сделать так, чтобы под-подменю появляловь тогда, когда наводишь на подменю. А то все сразу раскрывается когда наводишь на подменю((
Вопрос, у вас сказано что для того чтобы меню после обноления страницы не раскрывалось нужно написать «display: none;» я воткнул, а он мне отказался вообще его отображать (меню), я так и не понял почему, потом использовал другой тег «visibility: hidden;» он помог, НО на следующий день таже байда меню не хочет отображаться.
И сразу вопрос как правильно сделать дочерние меню 3 уровня (как у вас на первой картинке).
Решение вашей проблемы здесь — http://mywordpress.ru/support/viewtopic.php?id=13700
Вообще в этой статье неправильно прописаны CSS отсюда и столько проблем с меню. CSS прописаны лишь до первого уровня вложенности и всё.
Флетчер, я по поводу вложенности сам дорубил, а вот глюк с «display: none;» сохранился даже при вашем стиле, убираешь показывает, но раскрыто. Кто нибудь помогите, фигня какая — то.
Сделал всё по пунктам, но не работает почему-то. До пункта 5 всё было хорошо, а вот потом не фига не работает.
вот спасибо большое. отличная статья :)
А где в настройках темы менять параметры? Допустим чтобы показывалось количество записей в каждой рубрике? (тема поддерживает) Заранее спасибо.!!
Добрый вечер!
Столкнулся с проблемой следующего характера: все меню выпадает как один горизонтальный столбец. Как сделать чтобы выпадал, например, квадрат из ссылок 5 на 5.
Заранее спасибо за ответ!
Спаисибо работает.
Хотел спросить,я новичок просто,:
как можно отрегулировать высоту дочерних елементов меню,основные у меня высокие 80px,
а выпадающие хотел бы сделать меньше 37px.
Я ЦСС ещё пока плохо знаю,где конкретно прописать,на вашем примере?
У меня на сайте всё получилось по вашей инструкции.:) Спасибо.:)
Спасибо за статью! Коротко и доходчиво.
У меня не скрываются дочерние страницы, то есть меню всё время в раскрытом виде…
Спасибо супер
Хотел спросить:
Когда находишся на странице второго уровня,нельзя сразу перейти на другую страницу второго уровня.Если только опять перейти на родительскую,тогда можно.
А что и где надо дописать для того чтоб можно было сразу переходить на любой уровень?
Приветствую,
у меня не появляются дочерние ссылки.
Подскажите что не так в коде!
Заранее благодарен!
Мой header.php
<meta http-equiv="Content-Type" content="text/html; charset=» />
jQuery(document).ready(function(){
jQuery(«#menu li»).hover(
function(){
jQuery(this).find(‘ul’).show();
},
function(){
jQuery(this).find(‘ul’).hide();
}
);
});
<?php
/*
* Print the tag based on what is being viewed.
*/
global $page, $paged;
wp_title( ‘|’, true, ‘right’ );
// Add the blog name.
bloginfo( ‘name’ );
// Add the blog description for the home/front page.
$site_description = get_bloginfo( ‘description’, ‘display’ );
if ( $site_description && ( is_home() || is_front_page() ) )
echo » | $site_description»;
// Add a page number if necessary:
if ( $paged >= 2 || $page >= 2 )
echo ‘ | ‘ . sprintf( __( ‘Page %s’), max( $paged, $page ) );
?>
<link rel="stylesheet" href="» type=»text/css» media=»screen» />
Здравствуйте! Мой вопрос такой.Не мешает ли такое меню индексации сайта поисковыми система, вот тут написано http://help.yandex.ru/webmaster/?id=1108949 что навигация через скрипты нежелательна. Есть мнение по этому поводу?
Такое меню не мешает индексации, поскольку оно присутствует на странице, просто скрыто от глаз пользователя. Навигация через скрипты в данном случае означает, что переход по ссылке инициирован ява-скриптом, а не кликом пользователя по тегу a
А ну тогда отлично. Кстати, огромное вам спасибо за материал, сидел два дня, тема у меня немного со странностями, но все реализовал благодаря вашей инструкции. Последние сомнение по этому поводу оставляла индексация сайта ПС, но если поисковик их видит, тогда все нормально.
Добавился в RSS, буду постоянным читателем :)
Не за что, я рада, что вам помогла моя статья.
Хороший пример. У меня вопрос? В моем шаблоне нет поддержки дополнительных меню, но я их создал при помощи функции wp _ nav _ menu. Выводится он при помощи ul id=»имя меню» и к нему прикреплены CSS. Собственно вопрос: как мне вывести выпадающее меню посредством функции: wp_nav_menu&
Вариант с функцией wp _ list _ pages не подходит, так как нет возможности туда добавить рубрики!
В PHP и CSS особо не силен, а реализовать очень нужно!
Заранее спасибо!
А у меня вопрос, «Это можно сделать в разделе head, до функции , файла header.php, следующей строчкой:», до какой функции? Я чайник в этом еще, поэтому буду признательна за помощь!
Пробую сделать у себя на сайте Набережные Челны Новости — не получается, при загрузке страницы сразу раскрыто, надо мышью подводить чтобы закрылась…
Здравствуйте, у меня такая проблема. Тема моего сайта не поддерживает выпадающее меню. Хотелось бы создать меню в стилистике темы. Подскажите что где заменить и как связать с темой выпадающее меню. Заранее благодарю!