Делаем темы WordPress виджет-совместимыми

Декабрь, 07th 2009Рубрика: Web 20048
Подписаться на комментарии по RSS

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

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

Итак, рассмотрим подробнее как можно добавить поддержку виджетов в шаблон вашей темы. Для этого нам понадобится поправить файл sidebar.php. В текстовом редакторе открываем 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>

В примере жестко прописаны показ списка рубрик, архива и блока ссылок. Путём правки этого файла можно поменять порядок блоков, добавить или удалить другой информационный блок. Добавим сюда пару строк (02 и 14 строка) кода, для отображались виджетов:

<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) куда смело можно добавлять доступные виджеты. О том как это делается я писал здесь.

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

При внимательном изучении кода, замечаем, что виджеты генерируются внутри тэга li, то есть подразумевается, что вместо div id="sidebar" должно быть ul id="sidebar". Значит нам нужно сделать так, чтобы при генераци виджетов они не вкладывались в тэг li.

Нам потребуется немного допилить functions.php:

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

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

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

<?php
if ( function_exists('register_sidebars') )
register_sidebars(2);
?>
[/sourcecode]
или
[sourcecode language='php']
<?php
if ( function_exists('register_sidebars') )
register_sidebars(2, array(
'before_widget' => '',
'after_widget' => ''
));
?>

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

Подписывайтесь на канал Яндекс.Дзен и узнавайте первыми о новых материалах, опубликованных на сайте.

Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.

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