Делаем тему для WordPress виджет-совместимой

Эту статью можно назвать продолжением моей предыдущей статьи о виджетах. Виджеты - хорошая штука, так как позволяют простым перетаскивание добавлять/удалять блоки, менять их порядок в колонках блога.

В принципе, мнгоие авторы тем, распространяемых по GPL, уже давно сделали свои темы виджет-совместимыми. Но если вы скачивали тему давно, а новой версии ее автор не выпустил, то вполне возможно, что использование виджетов в ней не предусмотрено. Да и темы, созданные самостоятельно тоже часто не рассчитывались на использование виджетов, так как не было нужды или автор темы просто не знал о них.

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

Ниже я опишу как можно добавить поддержку виджетов в вашу тему, и как можно адаптировать их вид к вашей теме.

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

Для начала, для тех, кто не уверен, поддерживает ли тема виджеты или нет и не читал предыдущую статью о виджетах, советую просмотреть первую её часть. Там я описал куда нужно кликать и что будет показано на странице в различных случаях.

Включаем поддержку виджетов в шаблоне темы

Итак, имееем тему, к которой мы хотим рикрутить поддержку виджетов. Вспомним, что виджеты - это блоки информации,которые показываются в колонках блогах(так как колонка не всегда одна). Значит нам нужно изменить шаблон, в котором происходит формирование колонок. Шаблон этот, как правило, находится в файле sidebar.php.

Для примера, я использую тему русифицированную версию тему Emire 1.0, взятую по адресу http://themes.mywordpress.ru/view/Emire. Вполне возмжно, что ее автор уже обновил ее, но мне важно, что данная версия не поддерживает виджеты и я попробую сделать ее виджет-совместимой самостоятельно.

Открываем файл sidebar.php и видим следующий код:

<div id="sidebar">
<h2>Рубрики</h2>
<ul>
<?php wp_list_cats('sort_column=name&optioncount=1&hierarchical=0'); ?>
</ul>
</ul>
<h2>Архив</h2>
<ul>
<?php wp_get_archives('type=monthly'); ?>
</ul>
<ul>
<?php get_links_list(); ?>
</div>

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

Для того, чтобы в этой колонке отображались виджеты, когда они активированы, необходимо добавить все несколько строк кода:

<div id="sidebar">
<?php if ( !function_exists('dynamic_sidebar')
|| !dynamic_sidebar() ) : ?>

<h2>Рубрики</h2>
<ul>
<?php wp_list_cats('sort_column=name&optioncount=1&hierarchical=0'); ?>
</ul>
</ul>
<h2>Архив</h2>
<ul>
<?php wp_get_archives('type=monthly'); ?>
</ul>
<ul>
<?php get_links_list(); ?>
<?php endif; ?>
</div>

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

Теперь нам нужно сообщить системе, что наша тема содержит одну колонку, на которой можно расположить виджеты. Для этого мы создаем файл functions.php(если его нет) и прописываем в него следующий код:

<?php
if ( function_exists('register_sidebar') )
register_sidebar();
?>

Таким образом, мы зарегистрировали одну колонку(по -умолчанию) . Теперь, зайдя на страницу управления виджетами(Внешний вид -> Виджеты) мы видим прямоуголник, подписанный как Сайдбар 1(Sidebar 1). Перетянем на него какие-нибудь виджеты из доступных, нажнем на кнопку "Сохранить изменения" и - ура! - виджеты показались в колонке блога! :) Правда выглядят не совсем так, как те, что были прописаны в шаблоне sidebar.php... Сейчас посмотим что с этим можно сделать.

Определяем контейнер для виджетов

Давайте посмотрим на код, который генерируется после включения в нашу колонку виджетов:

<div id="sidebar">
<li id="search" class="widget widget_search">
<form id="searchform" action="xxxxxxxxxx" method="get">
<div>
<input id="s" type="text" size="15" name="s"/>
<br/>
<input type="submit" value="Найти"/>
</div>
</form>
</li>
<li id="links" class="widget widget_links">
<h2 class="widgettitle">Ссылки</h2>
<ul>
<li>
<a title="PHP4 и 5 хостинг, MySQL5.0" href="http://isahost.com">Наш хостинг</a>
</li>
</ul>
</li>
</div>

Как видим, виджеты генерируются внутри тэга li, то есть подразумевается, что вместо <div id="sidebar"> должно быть <ul id="sidebar">, но автор темы, увы использовал div. Значит нам нужно сделать так, чтобы при генераци виджетов они не вкладывались в тэг li. Наш замечательный WP это позволяет сделать без особых проблем:

Изменяем код, регистрации колонки в functions.php на следующий:

<?php
if ( function_exists('register_sidebar') )
register_sidebar(array(
'before_widget' => '',
'after_widget' => ''
));
?>

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

Таким образом мы подстраиваем вывод наших виджетов под существующий html-шаблон колонки. Но если вы только разрабатываете свою тему, то всегда имейте ввиду, что колонки лучше определять тэгом ul, так как стандартные виджеты, и большинство сторонних, по умолчанию, рассчитаны именно на это. И вам будет проще подстроить свою тему под виджеты, чем потом подстраивать вид виджетов под вашу тему. К тому же, ограничение тела виджета тэгом li дает большую гибкость при определении стилей для виджетов.

Возможно, что для некоторых виджетов вам придется дополнительно задать стили в CSS файле, например, для форм или каких-то других вложенных тэгов.

Использование больше чем одной колонки.

В случае, если ваша тема содержит больше чем одно колонки, вам необходиом при регистрации колонок использовать вместо фнкции register_sidebar функцию register_sidebars(n). Например, для двух колонок код будет такой:

<?php
if ( function_exists('register_sidebars') )
register_sidebars(2);
?>

или

<?php
if ( function_exists('register_sidebars') )
register_sidebars(2, array(
'before_widget' => '',
'after_widget' => ''
));
?>

И в шаблоне sidebar.php при вызове функции dynamic_sidebar() в качестве параметра передаете номер колонки(начиная с 1).

Вот, собственно, и все.

Комментариев: 17

  1. Дата: Сентябрь 24, 2007, 17:47 | Ссылка

    > Использование больше чем одной колонки

    Отдельное спасибо за это. Два часа убил на поиск объяснения, как регистрировать несколько сайдбаров.

  2. Дата: Январь 10, 2008, 23:02 | Ссылка

    Огромное спасибо просто и доступно разложено :)

  3. Дата: Январь 20, 2008, 03:29 | Ссылка

    Проблема возникла. Не понимаю как её исправить. Сделал всё как тут написано но виджеты не отображаються. В админке появилась возможность перетаскивать виджеты на сайдбары, а вот в теме они не отображаються? Помогите пожалуйста.

  4. Дата: Август 22, 2008, 08:55 | Ссылка

    Честно сказать пытался по Вашей инструкции адаптировать безвиджетную тему с 2-мя сайдбарами. Виджеты включаются вроде как, но они прикрепляются только к первому сайдбару. В чем проблема пока не смог понять WP ver- 2.6, Тема Grid Focus Public 1.0

  5. Дата: Сентябрь 8, 2008, 19:08 | Ссылка

    попытаюсь с помощью ваших подсказок исправить руссифицированную тему TypoXP 1.0.3! Если не получиться буду еще обращаться!!!

  6. Дата: Сентябрь 8, 2008, 19:28 | Ссылка

    Проблема возникла. Не понимаю как её исправить. Сделал всё как тут написано но виджеты не отображаються?? Попрежнему пишеться:
    - Боковые колонки не определены
    - Вы видите это сообщение, потому что используемая вами тема не поддерживает виджеты, а значит, нет и возможности настраивать боковые колонки. Для получения дополнительной информации посмотрите инструкцию по доработке темы.

  7. Дата: Октябрь 31, 2008, 19:07 | Ссылка

    Большое,просто огромное спасибо за виджетирование,а то как никак под сапу нормальную тему заточить немог..а тут Вы Респект….

  8. Александр
    Дата: Август 10, 2009, 12:15 | Ссылка

    Спасибо! Как раз выбрал темку подходящую, а оказалась что она вилжеты не поддерживает! С помощью данной статьи и подсказки программиста :) все получилось !

  9. ира
    Дата: Сентябрь 14, 2009, 18:09 | Ссылка

    статья замечательная только у меня ничего не получилось(

  10. Toxa
    Дата: Сентябрь 19, 2009, 15:28 | Ссылка

    спасибо,мужик

  11. Дата: Ноябрь 3, 2009, 01:06 | Ссылка

    Спасибо за статью. Очень помогло. Только у меня не полусилось с “Определяем контейнер для виджетов”. Виджеты появляются но оформлены не красиво. Только надписи. ((

    Фух… Ладно. Завтра разберусь. Спать пора.

  12. Дата: Ноябрь 13, 2009, 22:38 | Ссылка

    К сожалению я не силен во всем этом!
    У меня одноколоночная темка, виджеты я включил, но они никак не хотят отображаться! Помогите ради бога)

  13. Дата: Декабрь 13, 2009, 20:13 | Ссылка

    Большое спасибо за подробную инструкцию. За 20 минут разобрался :)

  14. Veert
    Дата: Январь 25, 2010, 01:43 | Ссылка

    код в оригинале должен быть такой:

  15. Дата: Март 8, 2010, 02:20 | Ссылка

    Спасибо за понятный мануал. Все получилось сразу.

  16. Jane
    Дата: Август 5, 2010, 11:40 | Ссылка

    Спасибо за подверждение того что вроде-бы я все делала правильно. Cтатью прочла только после изучения того куда послал wordpress)), но у меня так и не получилось.
    код в sidebar.php достаточно длинный и начинается и заканчивается он совсем не так как в Оригинале и у Вас

    пробовала что-то менять, но выдает ошибку.
    есть какие-то ньансы?

  17. Дата: Сентябрь 1, 2010, 16:02 | Ссылка

    Здравствуйте ! сайт на wp 2.9.2,плагин SAPE Links, v0.5 сылка на сайт где можно посмотреть наглядно мою проблему http://novoross-leader.ru/archives/2049.
    Я новичок и у меня несколько вопросов:
    1.хочу сделать 5 виджетов ,но когда я выбираю 5 виджетов и сохраняю ,он все равно один.?
    2.Как сделать чтобы стиль отображения сылок сапы был такойже как у меня на сайте?
    Помогите пожалуйста!!!!!!!!!!!!!!!!!!!!!!!

На эту страницу размещена 1 ссылка

  1. Дата: Октябрь 4, 2008, 17:05

    […] Статья находится по аресу [http://a2p.net.ru/wordpress/14/widgetising-wordpress-themes/] […]

Оставьте комментарий!

Обязательные поля отмечены знаком *

*
*

Powered by WP Hashcash

аватары блог браузер верстка интерфейсы контекст плагины ссылки статистика темы топ формы яндекс bugs chrome freeBSD Google gravatar HTML linux plugins rss sape.ru seo wget WordPress yandex