Из этого урока вы узнаете, как добавить в тему для WordPress поддержку виджетов, и выводить их в сайдбаре.
Функция добавления сайдбара
Чтобы добавить к теме поддержку виджетов, необходимо зарегистрироват боковую колонку при помощи функции register_sidebar()
. Давайте добавим сайдбар со всеми возможными параметрами в начало файла functions.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Register Sidebar function striped_sidebar() { $args = array( 'id' => 'sidebar-left', 'name' => __( 'Sidebar', 'striped' ), 'description' => __( 'Left Sidebar', 'striped' ), 'class' => 'striped-widget', 'before_title' => '<h2 class="widgettitle">', 'after_title' => '</h2>', 'before_widget' => '<div id="%1$s" class="widget %2$s">', 'after_widget' => '</div>', ); register_sidebar( $args ); } // Hook into the 'widgets_init' action add_action( 'widgets_init', 'striped_sidebar' ); |
Немного о возможных аргументах:
'id' => 'sidebar-left'
– задает ID сайдбара, по которому мы в дальнейшем будем выводить его в теме'name'
– название сайдбара, которое будет выводиться в консоли при добавлении в него виджетов'before_title'
,'after_title'
,'before_widget'
,'after_widget'
– задают теги, которые будут до и после заголовка виджета и до и после самого виджета
Теперь для того, чтобы отобразить сайдбар в теме, необходимо в файл sidebar.php добавить вызов. Обратите внимание, что обязательно нужно указать ID сайдбара, его мы задали в функции вверху:
1 2 3 |
<?php if ( ! dynamic_sidebar('sidebar-left') ) : ?> <!-- тут будет содержимое сайдбара, которое выведется, если в него не поместили виджеты --> <?php endif; ?> |
Добавьте первую строку после вывода логотипа:
1 2 3 4 5 |
<!-- Logo --> <div id="logo"> <h1>STRIPED</h1> </div> <?php if ( ! dynamic_sidebar('sidebar-left') ) : ?> |
А вторую строку перед копирайтом:
1 |
<?php endif; ?> |
Теперь мы можем заметить в Консоли, что у нашей темы появилась поддержка виджетов, и мы уже можем их добавить и посмотреть на результат.
Следующим шагом будет настройка оформления виджетов, чтобы они были такими же, как в верстке.
Оформление виджетов в сайдбаре
В сайдбаре у нас должны выводиться следующие виджеты:
- меню со страницами
- поиск
- текстовый виджет в рамке
- последние записи
- последние комментарии
- календарь
Сначала посмотрим, как выводятся виджеты в верстке. Они обернуты в тег section
, а заголовки виджетов – в header
. Сделаем также в нашей теме, внесем измерения в 'before_title'
и 'after_title'
, 'before_widget'
и 'after_widget'
:
1 2 3 4 5 6 7 8 9 10 11 |
$args = array( 'id' => 'sidebar-left', 'name' => __( 'Sidebar', 'striped' ), 'description' => __( 'Left Sidebar', 'striped' ), 'class' => 'striped-widget', 'before_title' => '<header><h2 class="widgettitle">', 'after_title' => '</h2></header>', 'before_widget' => '<section id="%1$s" class="widget %2$s">', 'after_widget' => '</section>', ); register_sidebar( $args ); |
Точно также сопоставим, какому классу вордпресс соответствуют классы виджетов в верстке. Здесь нам поможет расширение FireBug для Firefox, или, если используете Chrome, нажмите F12:
is-search
в верстке этоwidget_search
is-text-style1
в верстке этоwidget_text
is-recent-comments
в верстке этоwidget_recent_comments
is-recent-posts
в верстке этоwidget_recent_entries
is-calendar
в верстке этоwidget_calendar
- виджет с навигационным меню будем настраивать отдельно
Теперь заменим в CSS стили на те, которые использует вордпресс.
Обратите внимание, в текстовом виджете вложенный div
имеет класс inner
, а в вордпресс – класс textwidget
, это в CSS тоже нужно заменить. То же самое касается и виджета календаря, только там вместо .inner
– #calendar_wrap
.
Виджет “Поиск”
Виджет поиска придется настроить отдельно, так как он не совпадает по разметке с тем, что есть в верстке.
Существует несколько способов создать собственную форму поиска для вордпресс. Со всеми вы можете ознакомиться в Кодексе.
Самым простым является использование отдельного файла в теме для вывода формы. Нам нужно создать в папке темы новый файл с именем searchform.php со следующим содержанием:
1 2 3 |
<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>"> <input type="search" class="search-field" placeholder="Поиск" value="" name="s" title="Поиск:" /> </form> |
Сохраните файл. После этого наша форма поиска будет выглядеть так же, как и в верстке. Если вы брали другой шаблон, то посмотрите, какие поля и классы есть там, и перенесите их в шаблон.
Настройка меню
Самое трудное сегодня будет в конце. Сейчас мы настроим вывод виджета произвольного меню со списком наших страниц.
Сейчас меню выводится в верстке вот таким кодом:
1 2 3 4 5 6 7 8 9 |
<!-- Nav --> <nav id="nav"> <ul> <li class="current_page_item"><a href="#">Latest Post</a></li> <li><a href="#">Archives</a></li> <li><a href="#">About Me</a></li> <li><a href="#">Contact Me</a></li> </ul> </nav> |
А вордпресс сгенерировал такой код для меню:
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 |
<section id="nav_menu-2" class="widget widget_nav_menu"> <div class="menu-1-container"> <ul id="menu-1" class="menu"> <li id="menu-item-2419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-2419"> <a href="/"> Главная </a> </li> <li id="menu-item-2127" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2127"> <a href="1"> один </a> </li> <li id="menu-item-2128" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2128"> <a href="2"> два </a> </li> <li id="menu-item-2177" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2177"> <a href="3"> три </a> </li> <li id="menu-item-2179" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2179"> <a href="4"> четыре </a> </li> </ul> </div> </section> |
Для стилей в CSS сейчас используется #nav li
. Поэтому нам нужно вместо #nav
использовать в стилях .widget_nav_menu
. Заменяем. Также вместо .current_page_item будет использовать .current-menu-item, так как в меню у нас могут быть не только страницы, но и посты, и произвольные ссылки. Тоже заменяем. Проверяем – если все сделано правильно, все должно работать.
Заголовок блога и копирайты
Сделаем вывод названия блога в боковой колонке. Вместо статичного кода:
1 2 3 4 5 6 |
<!-- Logo --> <div id="logo"> <h1> STRIPED </h1> </div> |
Вставьте:
1 2 3 4 5 6 |
<!-- Logo --> <div id="logo"> <h1> <?php bloginfo('name'); ?> </h1> </div> |
И заодно сделаем вывод названия блога в копирайтах. В файле sidebar.php, вместо этого:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<!-- Copyright --> <div id="copyright"> <p> © 2013 An Untitled Site. <br /> Images: <a href="http://n33.co"> n33 </a> , <a href="http://fotogrph.com"> fotogrph </a> <br /> Design: <a href="http://html5up.net/"> HTML5 UP </a> </p> </div> |
Вставьте:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<!-- Copyright --> <div id="copyright"> <p> © <?php echo date('Y');?> <?php bloginfo('name'); ?> <br /> Images: <a href="http://n33.co"> n33 </a> , <a href="http://fotogrph.com"> fotogrph </a> <br /> Design: <a href="http://html5up.net/"> HTML5 UP </a> </p> </div> |
Так как наш шаблон распространяется по лицензии Creative Commons, удалять ссылки на автора мы не будем.
Итоги
Мы создали сайдбар, добавили в него виджеты и настроили их стили. Также мы сделали вывод названия блога в боковой колонке и в подвале.
В следующей части мы создадим постраничную навигацию.