Оптимизация сайдбара WordPress

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

Собственно о какой оптимизации идет речь? Дело в том, что виджеты «Рубрики» и «Архив» в этом блоге по ширине занимают ровно половину сайдбара. Так почему бы не расположить их рядом (а не один под другим, как сейчас было до написания поста), ведь так будет намного проще найти нужную рубрику или посмотреть счетчик посещаемости, потому что не придется прокручивать страницу.

Делаем двойной сайдбар в WordPress

Сказано — сделано. Я помню, что при редактировании темы (то ли переводил что-то, то ли дописывал…) я видел в файле functions.php что-то, связанное с сайдбаром. Вот как выглядит этот код:

if ( function_exists('register_sidebar') )
{
    register_sidebar(array(
        'before_widget' => '<li id="%1$s" class="widget %2$s">',
        'after_widget' => '</li>',
        'before_title' => '<h2 class="widgettitle">',
        'after_title' => '</h2>',
    ));
}

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

if ( function_exists('register_sidebar') )
{
    register_sidebar(array(
        'before_widget' => '<li id="%1$s" class="widget %2$s">',
        'after_widget' => '</li>',
        'before_title' => '<h2 class="widgettitle">',
        'after_title' => '</h2>',
    ));
    register_sidebar(array(
        'name' => 'Left Sidebar',
        'before_widget' => '<li id="%1$s" class="widget %2$s">',
        'after_widget' => '</li>',
        'before_title' => '<h2 class="widgettitle">',
        'after_title' => '</h2>',
    ));
    register_sidebar(array(
        'name' => 'Right Sidebar',
        'before_widget' => '<li id="%1$s" class="widget %2$s">',
        'after_widget' => '</li>',
        'before_title' => '<h2 class="widgettitle">',
        'after_title' => '</h2>',
    ));
}

После этого в разделе панели управления «Внешний вид» → «Виджеты» появятся два новых виджета с именами «Left Sidebar» и «Right Sidebar». Перетаскиваем на них «Рубрики», «Архив» и «Счетчик». Кстати, важно не забыть выключить плагин WP Super Cache, если он используется в блоге, иначе никаких изменений на сайте не будет видно.

Теперь правим sidebar.php. Вот — что было:

  <div id="sidebar" class="sidebars">
    <ul>
    <?php
    if ( function_exists('dynamic_sidebar') && dynamic_sidebar(1) ){
    ?>
      <?
      } else { ?>

А вот — что стало:

  <div id="sidebar" class="sidebars">
    <ul>
    <?php
    if ( function_exists('dynamic_sidebar') && dynamic_sidebar(1) ){
    ?>
<div style="float: left; width: 49%;">
<?php dynamic_sidebar(2); /* левый сайдбар */ ?>
</div>
<div style="float: right; width: 49%;">
<?php dynamic_sidebar(3); /* правый сайдбар */ ?>
</div>
<div class="clear"></div>
      <?
      } else { ?>

Вслед за основным сайдбаром мы выводим два новых. Определить id сайдбара, который нужно передать функции dynamic_sidebar, очень просто — в соответствии с порядком, в котором сайдбары создаются в functions.php с помощью register_sidebar().

Ширину слоев, в которых будут выведены сайдбары, я установил равной 49%, чтобы между ними осталось пространство. Два сайдбара вплотную друг к другу — это не очень красиво.

По большому счету — это все, но в моем случае пришлось еще поправить таблицу стилей. Смотрим:

#sidebar{
  width:260px;
}

/* .... */

.sidebars li ul{
  background:#f1f1f1;
  width:240px;
  padding:10px;
}

Нужно просто закомментировать строку относительно ширины виджетов (.sidebars li ul). Далее — включаем WP Super Cache, очищаем кэш, жмем Ctr+R, чтобы браузер обновил CSS, и смотрим результат. По-моему стало ощутимо удобнее. Надеюсь, в вашем браузере ничего не поползло?

На проделанные телодвижения уходит минут пять. На мой взгляд, основная ценность данного приема состоит в том, что теперь, листая каталоги шаблонов WordPress при создании очередного «серого» проекта, не нужно думать о том, сколько сайдбаров он поддерживает. А если вы работаете дизайнером — вам не нужно ломать голову над тем, сколько сайдбаров делать в шаблоне. Делайте один, а если заказчик окажется недовольным, вы с легкостью добавите еще пол десятка.

  • http://trainclub.ru/ Стасег

    ппц, мне вас жалко :) Чтобы тупо изменить размер и расположение блоков-нужно ковыряться черте где. WordPress — кака, учите нормальные CMS (ExpressionEngine вам в руки). Пример: http://trainclub.ru

    • http://eax.me/ Безумный Программист

      Стасег, привет. Это не Вы просили trainclub.ru на talk.maulnet.ru оценить? :) Я кстати поинтересовался тогда, что за движок Вы используете.

      На счет CMS — ну не переносить же мне теперь блог на ExpressionEngine (а через год еще на какой-нибудь движок) только потому что он в чем-то лучше WordPress. Править код вообще не так уж часто приходится. Но если мне захочется сделать новый сайт, я обязательно попробую ExpressionEngine.

      Кстати, если Вам так нравится этот движок, можете написать о нем небольшую заметку для web20.su, разумеется с парой ссылок на Ваши сайты. Подробности тут: http://web20.su/post-article/

    • http://mozgomix.ru mozgomix

      НУ, на вкус и цвет, как говорится, фломастеров нет. CMSок очень много. Мне вот приглянулась MaxSite CMS — сижу изучаю её, пишу плагины/виджеты. А вордпресс хорош богатством уже готовых плагинов и виджетов, мало чего нужно дописывать самому, но в скорости, конечно, многим проигрывает, но для небольших проектов вполне годится.

  • Uzen93

    Cтасег прикольно так прорекламировал свой сайт :-). Респект.

  • http://eax.me/ Безумный Программист

    Да нет, не думаю что тут дело было в рекламе. А даже если и так — для хорошего сайта не жалко.

  • Uzen93

    Cтасег прикольно так прорекламировал свой сайт :-). Респект.

  • http://eax.me/ Безумный Программист

    Да нет, не думаю что тут дело было в рекламе. А даже если и так — для хорошего сайта не жалко.

  • http://trainclub.ru Стасег

    Хорошо, на днях напишу небольшую статью о движке. К слову, скоро заканчиваю свой второй большой проект. Тоже выполнен на ЕЕ :) подробности — скоро

    • Jonston

      EE же платная по-моему.

  • http://eax.me/ Безумный Программист

    Ждем :)

  • YrZ

    сначала попал сюда, а потом нашел решение посвежее. помогло)

    http://www.chidimar.com/create-custom-sidebar-i…

  • http://maxwmz.ru/ Максим Синяков

    Спасибо автору. Благодаря статье, переделал тему на блоге под себя.
    Теперь стало две колонки. :)

  • http://otakunews.ru Roma

    Спасибо. Мучился мучился и напер!!))

  • http://atayanv.ru Atayanv

    Большое спасибо, супер!

  • http://vse-orabote.ru Мимоходом

    Спасибо. Сейчас потихоньку кропаю первый СДЛ (блин, времени на интересные проекты уходит уйма) и, как раз, именно эта тема стоит в туду. Хоть и неожиданно попал на эту страницу, однако, очень удачно :)
    Еще раз спасибо.

  • http://sezonoj.ru/ Sezonoj

    Вопрос. А где определяется шрифт заголовка? Речь идёт о классе
    »

    • http://eax.me/ afiskon

      Очевидно, в CSS.