Создание виджет-совместимой темы для WordPress
В этом посте я расскажу как создать тему, поддерживающую виджеты и как превратить облако меток в список тегов.
У нас есть (у меня есть) папка с темой в одну колонку и таким содержимым:
- images\
- style.css
- index.php
- comments.php
- footer.php
- header.php
- functions.php
- screenshot.png
Подробнее о теме в одну колонку, всех этих файлах и их содержимом можно прочитать в моих первом и втором постах.
Для создания темы, поддерживающей виджеты, нужен сайдбар (sidebar.php). Он может быть один (например правый), а может случится так, что вам понадобится несколько (2 правых, 2 левых, правый и левый, может еще нижний – это уже для шаблонов с множеством колонок). Но обо всем по порядку.
Предположим, нам нужен один сайдбар, правый. Будем использовать стандартные виджеты (т.е. те, что настраиваются в админке – Дизайн – Виджеты). Чтобы они работали и вордпресс не писал, что тема не виджет-совместимая, мы ее (тему) будем адаптировать.
Создаем файл sidebar.php:
[sourcecode language='php'] [/sourcecode]
В functions.php пишем (если такого файла нет, то создаем его, а затем добавляем следующий код):
[sourcecode language='php'] ' ', 'before_title' => '', 'after_title' => '
', )); ?> [/sourcecode]
Подключаем наш сайдбар в index.php (сразу после подключения шапки) с помощью
<?php get_sidebar(); ?>
Заходим в админку, меню Дизайн, пункт Виджеты и видим список доступных виджетов. Выбираем нужные. У меня это выглядит так

Обратите внимание на список меток – он представлен облаком (выводится с помощью виджета “Облако меток”), а все остальные виджеты выводят список списком. Лично мне захотелось привести все к единому виду, чтобы было читабельнее. Для этого нужно немного поднапрячься и превратить стандартный виджет “Облако меток” в нестандартный.
Создаем папку includes, в ней файл widget_tags.php, в нем такой код:
[sourcecode language='php']
%s
';
$tags_li_pattern = '
Если вы пытались отобразить облако в виде списка, то должны были столкнуться с функцией wp_tag_cloud(), но от нее ничего не добьешься. Функция get_tags() позволяет управлять полученными данными и при этом обладает такими же параметрами как и wp_tag_cloud(). Я использую сортировку тегов по популярности.
В functions.php подключаем созданный нами виджет
include ‘includes/widget_tags.php’;
В админке в меню Дизайн пункте Виджеты появился наш нестандартный виджет – Теги. Подключаем (настроек у него нет) и оцениваем результат.

Теги выводятся списком. Обратите внимание на число в скобках – это количество постов, в которых встречается тег.
Теперь усложняем задачу – предполагаем, что у вас несколько сайдбаров (к примеру 2). Тогда корректируем functions.php:
[sourcecode language='php']
'first',
'before_widget' => '
',
'before_title' => '
',
'after_title' => '
',
));
register_sidebar(array(
'name' => 'second',
'before_widget' => '',
'after_widget' => '',
'before_title' => '',
'after_title' => '',
));
}
?>
[/sourcecode]
Как видите, во втором сайдбаре нет никаких тегов, классов. Это не ошибка. Вы можете не оборачивать заголовок виджета и список, тогда у вас будет просто текст (а не заголовок h2, как в первом случае) и просто список.
В корне папки с темой создаем два файла sidebar-first.php и sidebar-second.php с таким содержимым:
[sourcecode language='php'] [/sourcecode]
Первый отличается от второго именем файла (если sidebar-first.php, то используется ‘first’, если sidebar-second.php, то используется ‘second’) в строке
|| !dynamic_sidebar(‘first’) ) : ?>
Если вам понадобится больше сайдбаров, то вы знаете как увеличить их число – создаем нужное количество файлов sidebar-*, не забываем их регистрировать в functions.php, указывая номер.
Для отображения двух сайдбаров заменяем в index.php строку
<?php get_sidebar(); ?>
на две
<?php get_sidebar(‘first’); ?>
<?php get_sidebar(‘second’); ?>
и в админке настраиваем оба сайдбара, добавив виджеты.

Вот есть у нас тема (theme-archive) с двумя сайдбарами – скажем так трехколоночный вариант, расположение этих колонок достаточно легко изменяется с помощью стилей.






Avtogiro
в 13:06, 29.03.2010Который раз уже убеждаюсь в том, что много клонов тут.
Spacereal
в 12:05, 13.04.2010Зачем писать такое, можно и подумать иногда.
курсовой проект по теории машин МАМИ
в 9:32, 05.01.2012Какая талантливая мысль