Делаем темы WordPress виджет-совместимыми
В 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). Вот, собственно, и все.
Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.