Виджеты — это очень просто!

«Не знание технологий не освобождает от…», не, не то. «А я вот сделал, а оно не работает…».

К чему это я? Ах да, в последнее время ко мне несколько разных человек обратились примерно с одним и тем же вопросом:
«Почему, после того как я добавил в sidebar.php код кнопки/баннера/ссылки, ничего не изменилось и я их не вижу?!»
На что я сразу выдаю контр-вопрос (нет-нет, я не еврей):
«А вы используете в своей теме виджеты?!»

Просто не все осознают, что всё что находится ниже строки:
if ( !function_exists(‘dynamic_sidebar’) || !dynamic_sidebar() )
в sidebar.php будет показано ТОЛЬКО в том случае, если вы не включили ни одного виджета. В противном случае будут отображаться ваши настройки из «Внешний вид > Виджеты».

Обычно после того, как я это объясняю, следует вопрос — «Ну и как мне поместить свой код в сайдбар/виджет?!», да очень просто — если это обычный хтмл-код (а это в 90% случаев баннеры и стандартные ссылки/кнопки), то достаточно добавить стандартный текстовый виджет и поместить в него готовый код.

Но что делать, если виджет должен выводить результат выполнения какой-то функции? И ведь действительно, почти все «мощные» плагины, такие как ‘Popularity Contest‘ (русская версия), позволяют получать обработанную информацию из своих функций. Например, akpc_most_popular — самые популярные, akpc_most_popular_in_cat — самые популярные в какой-то категории и т.д.

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

Для таких страдальцев нашёлся чудо плагин Custom Function Widgets (скачать), авторства Kaspars Dambis из Латвии.

Как это работает.

  1. Скачиваете и устанавливаете как и любой другой плагин.
  2. После активации в меню «Внешний вид > Виджеты» появится новый раздел «Custom Function Widgets», где вы можете указать необходимое количество настраиваемых виджетов.
  3. Custom Function Widgets - admin panel - Screenshot

  4. Теперь перетащите один из «Custom Function» плагинов в свой сайдбар и нажмите кнопку настройки.
  5. Введите в поле Function name имя нужной функции (например, st_related_posts, чтобы вывести связанные посты, при помощи плагина Simple Tags) и жмём «сохранить».
  6. Вуаля, если всё сделали правильно, то можем полюбоваться на результат в сайдбаре блога.

Теперь объясню какие поля в настройках за что отвечают:
Widget title — заголовок виджета. Он будет показан при выводе (если вы специально не отключите, о чём ниже), а так же это название будет видно в панели управления виджетами.
Function name — имя функции. Указывается без кавычек и скобок.
Function variables — переменные, передаваемые в функцию. Если функция для работы требует параметры, то указывайте их тут. Важно сохранять последовательность переменных, а так же перечислять переменные через запятую, если их несколько.
HTML before и HTML after — хтмл код, который будет выводиться перед и после вашей функции. Обычно это обрамление тэгами списков, ну или возможно подключение какого-нибудь java-script.
Галочка Remove Widget title from output отключает вывод заголовка виджета в сайдбар, а Remove the default widget wrapper — отключит разрывы между виджетами.

В общем — пробуйте и пишите отзывы тут или сразу автору плагина, который очень оперативно ответил и исправил найденный мною баг. Ещё раз ссылка на скачку плагина.

Адаптируем тему под WordPress 2.3.x

Обещал, значится, вот и пишу. Если кто-то ожидает «откровений», то думаю несколько напрасно, но для общего развития людям, интересующимся CMS WordPress и желающим идти в ногу со временем, ознакомиться стоит.

Многих людей останавливает от перехода на WordPress 2.3 сам процесс апгрейда до новой версии, и я вполне их понимаю, потому что сталкивался с «кривыми» апдейтами, когда приходилось править «напильником» кодировки или наблюдать округлившиеся глаза после «преобразования категорий в тэги» и фразу «Эээ… а как это сделать обратно?».

Поэтому, если уж обновляетесь, то делайте это правильно, а, если есть возможность, попросите людей знающих. Они это сделают и быстро, и качественно, а то ведь можно и так конвертнуть базу, что «и» и «ш» пропадут и обратно их уже не получить.

Ну а теперь к теме поста. Первым делом определимся с тем, что у нас реально нового появилось в WordPress 2.3 относительно тем: 1. Тэги, 1а. Облако тэгов, 2. Несколько Deprecated тэгов и их новые аналоги.
Пройдёмся по порядку.

1.Тэги.

Да-да, теперь у нас есть встроенные тэги (ура-ура!), а так же несколько тэгов-разметки для работы с ними:
the_tags — выводит все тэги, назначенные посту, используется внутри Loop.
Синтакис простой: the_tags(‘текст ДО’, ‘разделитель МЕЖДУ тэгами’, ‘текст ПОСЛЕ’).
Примеры из кодекса:
the_tags(‘Метки:’, ‘, ‘, ‘<br />’); — выведет текст «Метки:», список тэгов через запятую, а потом перейдёт на новую строку.
Или вот код, выводящий тэги в виде ненумерованного списка the_tags(‘<ul><li>’,'</li><li>’,'</li></ul>’);

get_the_tags — функция возвращает (заметьте, не выводит, а только лишь возвращает) список всех тэгов, назначенных посту, в виде массива объектов. А вы уже с ним можете делать что хотите, т.е. формировать какие угодно конструкции и вводить проверки, работая с каждым тэгом в отдельности. Работает только в Loop.
Вот пример того, как выводить тэги в виде картинок, с соответствии с названием (стоит понимать, что картинку нужно положить в папку ДО применения тэга):

Всё просто, во второй строке мы сохраняем в переменную posttags все тэги данного поста, в третьей проверяем попался ли нам хоть 1 тэг (вот, кстати, и ещё одно применение get_the_tags() — проверка на существование тэгов, пример будет чуть позже), в четвёртой строке начинаем выдёргивать по очереди все тэги и с 5 по 9 строку выводим картинку в ссылке.
В принципе строки с 6 по 9 можно объединить в одну, это я чтобы в блоге за края не уезжало.

А вот этот коротенький код будет выводить тэги только тогда, когда они есть. Желательно использовать в том случае, если вы обновляли свой блог с более ранней (<2.3) версии и не успели "пометить" все посты, в таком случае пользователь не будет удивлён строчкой "Метки:" и пустым пространством за ним.

Ну и чтобы закончить с get_the_tags(), вот список параметров, которые можно получить через $tag->параметр:

  • term_id — id тэга
  • name — имя
  • slug — сокращение, сгенеренное из имени. Если вы используете RusToLat, то генериться он будет в транслите.
  • count — общее количество раз, которые тэг встречался в блоге.

single_tag_title — функция выводит/передаёт в переменную, заголовок страницы тэга, т.е. той, которая будет доступна при просмотре всех постов с определенной меткой (/tag/wordpress). Я кончено могу и ошибаться, но это 100% аналог тэга single_cat_title, причём, если вы применяете последний, то он адекватно будет выводить и заголовки для тэгов, а не только категорий.

1а. Облако Тэгов

До меня уже Максим подробно описал работу с облаком тэгов, поэтому просто процитирую его:

Для того, чтобы вывести облако меток, например в сайдбаре нужно использовать функцию wp_tag_cloud(). Функция принимает следующие аргументы (указаны значения по-умолчанию):

  • ‘smallest’ => 8 (минимальный размер шрифта)
  • ‘largest’ => 22 (максимальный размер шрифта)
  • ‘unit’ => ‘pt’ (единицы измерения)
  • ‘number’ => 45 (количество меток в облаке)
  • ‘format’ => ‘flat’ (разделитель: flat — пробел, list — список, array — массив)
  • ‘orderby’ => ‘name’ (сортировка: name — по имени, count — количеству записей)
  • ‘order’ => ‘ASC’ (порядок сортировки: ASC — прямой, DESC — обратный)
  • ‘exclude’ => » (исключить метки, указываются через запятую)
  • ‘include’ => » (включить метки, указываются через запятую)

Полезность для работы с тэгами.

Если кто ещё не знает о существовании такого мега полезного плагина как Simple Tags, то могу только… посоветовать его немедленно скачать и установить! Так же не забываем благодарить тов. Лекактуса за качественную локализацию и своевременные обновления.

Что может плагин (взято у Лекактуса):
Simple Tags — это ПРЕВОСХОДНЫЙ инструмент для управления вашими метками WP 2.3.
Он был написан со следующей философией: лучше производительность, больше безопасность и преподнесение новых функций!

  • угадывает метки при вводе и подставляет из существующих
  • автоматические подходящие метки для записи
  • управление метками (переименование,удаление объединение, поиск и добавление меток, редактирование коротких ссылок меток)
  • список непомеченных страниц/записей
  • массовое редактирование меток
  • возможность добавлять метки в страницы (не только записи) и включение их в результаты поиска по меткам
  • связанные записи по общим меткам
  • возможность добавлять связанные записи в RSS
  • динамические облака меток с раскрашиванием в виджетах
  • метки внутри заголовка блога
  • поддержка встраиваемых меток ([tags]tag1, tag2[/tags]) для совместимости со старыми записями, где они были заданы таким способом
  • Автоматическая вставка меток а записи (опционально, без редактирования шаблона). А также на выбор включение их только на блоге/в rss или в оба места сразу

О том, как всё это настраивать, написано ОЧЕНЬ подробно на странице плагина.
А ещё я советую вам пролистать блог Лекактуса на наличие кучи полезных плагинов и подписаться на рсс, чтобы следить за их обновлениями.

Deprecated тэги/функции и их новые аналоги

Небольшое отступление перед тем, как перейти непосредственно к самим тэгам. Если вы не знаете что, такое Deprecated (нежелательные) элементы в программировании, то в кратком виде статья с wikipedia:

Часть программы или метод, обозначенный как deprecated, являются сомнительными, и использование их в дальнейшем необоснованно. Эта часть работает в текущей версии ПО, однако может вызывать сообщение об ошибке в качестве предупреждения. Это служит для предупреждения пользователя о том, что данная часть кода может быть удалена в следующих резлизах программы.

Основной причиной объявления части кода (функций, методов, классов) как deprecated является желание улучшать код, и, при этом, со временем избавляться от устаревших подходов. Оставление старого кода наряду с новым приводило бы к неоправданному разрастанию программного продукта, что усложняло бы его поддержку, изучение и использование. В то же время, просто удалять устаревшие части кода нежелательно, так как это нарушит обратную совместимость для пользователей данного ПО.

Короче, никто не гарантирует, что те тэги/функции, которые были помечены deprecated после релиза WordPress 2.3, вообще будут работать, а уж тем более каждая новая версия (а 2.4 уже вот-вот будет доступен) увеличивает шанс, что тэги будут выдавать ошибку или работать не верно. Поэтому просто-напросто, нужно просмотреть свою тему, найти все вхождения «нежелательных» тэгов и поменять их на новые.

Тэги работы с ссылками из блогролла

get_links_list — вывод всех пунктов блогролла в виде не нумерованного списка.
wp_get_links — выводит ссылки из определенной категории блогролла, в виде списка.
get_links — настраиваемое отображение ссылок из блогролла.

На смену этим тэгам-разметки пришла (причём ещё в 2.1 версии, но запретили их только сейчас) функция wp_list_bookmarks(), которая делает всё тоже самое, только лучше.

Если использовать wp_list_bookmarks() без параметров, то на выходе получим список ссылок из блогролла, разбитые по категориям, отсортированные по имени, с картинкой, если она указана; так же в ссылке будет описание в title, взятое из соответствующего поля; рейтинг указан не будет.
Понятное дело, что параметров уйма:

  • categorize — разбивать ли ссылки по принадлежности категории? 1 — Да, 0 — Нет.
  • category — ID категорий через запятую, которые нужно отображать.
  • category_name — тоже самое, что и category, но указываются имена категорий.
  • category_orderby — по какому полю сортировать категории. name — имя (по-умолчанию) или id.
  • category_order — порядок сортировки по предыдущему параметру. ASС и DESC соответственно.
  • title_li — указываем текст, который будет выведен перед всеми ссылками, если параметр categorize=0. По-умолчанию выводится «Bookmarks», но если указать пустое значение (title_li=), то ничего выведено не будет, в том числе и <ul>, и </ul>.
  • title_before и title_after — два параметра определяющие обрамление описания (decription) категорий, при categorize=1. По-умолчанию обрамляются заголовком второго уровня (<h2></h2>). Если меняете один из этих параметров, то не забудьте заменить и второй.
  • show_private — параметр определяющий, можно ли отображать «приватные» ссылки. Если установлено значение 1, то игнорируются админские настройки и выводят даже личные ссылки.
  • include и exclude — позволяют точно указывать, какие ссылки (по ID) показывать/не показывать.
  • orderby — это уже сортировка ссылок, а не категорий, тут вариантов больше: id, url, name, target («Назначение» в русской версии), description (описание), owner (владелец ссылки, т.е. тот кто её добавил), rating, updated (дата последних изменений), rel («Отношение к ссылке»), notes («Заметки»), rss, length (сортировка в зависимости от длинны ), rand (в случайном порядке).
  • order — порядок сортировки по предыдущему параметру. ASС и DESC соответственно.
  • limit — количество ссылок, которые будут показаны. Параметр -1 отобразит все ссылки, удовлетворяющие остальным параметрам, он же и стоит по-умолчанию.
  • before, after, category_before, category_after — обрамление каждой ссылки и каждой категории (не описания, как в случае с title_before и title_after). По умолчанию в обоих случаях стоят <li>, и </li>, причём в <li> категории дописывается соответствующий ей id и class.
  • between — параметр, определяющий разделитель, между ссылкой/изображением и соответствующим описанием, по умолчанию стоит перевод на новую строку (‘\n’).
  • show_images — показывать ли изображение, если оно указано в соответствующем поле. 1 — Да, 0 — Нет.
  • show_description — показывать описание к ссылке или нет.
  • show_rating — отображать ли рейтинг.
  • show_updated — указывать ли дату и время последнего обновления.
  • hide_invisible — выводить ли ссылки помеченные как «невидимые»? В данном случае 1 — Нет, 0 — Да.
  • echo — выводить ли сразу в шаблон или просто вернуть значение в переменную (чтобы ещё мучать при помощи PHP). 1 — Да, 0 — Нет.

Фуф, осилили? Ну, тогда для самых стойких небольшой пример — код выводит ссылки из рубрики ID=2, используя при этом картинки, обрамленные в и без описания. В добавок всё отсортированно по URL ссылки.


Ну что же, вроде основные моменты в адаптации темы под WordPress 2.3.x я описал, остальное в ваших руках.

Если что-то осталось непонятным или после прочтения возникли вопросы, то не стесняемся и спрашиваем в комментариях. Хотелось бы узнать, полезно ли будет описать остальные Deprecated тэги и их аналоги, для тех, кто переходит с 2.0.x на 2.1 и выше?

Желаю успешного, а главное безглючного перехода на WordPress 2.3.

Хоткеи в WordPress и Zwordpress для FireFox

Тов. Евгений с Design For Masters (который я постоянно читаю) в комментариях к «Упрощаем себе жизнь в админке» посетовал на то, что в WordPress’овском (не визуальном) редакторе нет хоткеев. А как оказалось есть, и аж целых 13 штук!

1. Bold: Alt+SHIFT+b
2. Italics: Alt+SHIFT+i
3. Link: Alt+SHIFT+a
4. Blockquote: Alt+SHIFT+q
5. del: Alt+SHIFT+d
6. ins: Alt+SHIFT+m
7. Image: Alt+SHIFT+i
8. Unordered List (ul): Alt+SHIFT+u
9. Ordered List (ol): Alt+SHIFT+o
10. List Item (li): Alt+SHIFT+l
11. Code: Alt+SHIFT+c
12. More: Alt+SHIFT+t
13. Опубликовать пост: Alt+SHIFT+p

Как не трудно догадаться всё это реализовывается не какими-то спец.средствами WordPress, а банальным параметром у кнопок — accesskey, поэтому при небольших затратах времени можно прицепить хоткей вида Alt+SHIFT+буква к любой кнопке в админке и/или пользовательском меню, добавив в

атрибут accesskey=»буква».
В связи с этим желание улучшить функционал WP-AddQuickTag стало практически непреодолимо.

Пока искал плагины для вордпресса для реализации хоткеев, наткнулся на аддон для FireFox, под названием ZWordPress. По ссылке можно прочитать про установку и настройку, а так же скачать (zwordpress.xpi — 14 Кб).
Расскажу вкратце что он может, а вы уж сами решайте пользовать или нет: после установки вешает свою меню на панель, рядом со «Справкой», из которого можно открывать соответствующее меню своего блога откуда угодно, причём главная особенность — поддержка до 10 блогов с переключением между ними комбинацией Alt+Z+номер_настроенного_блога.

zwordpress blog menu

Доступ к пунктам меню всё через тот же хоткей или из панели:
zwordpress toolbar menu

Текущий активный блог показывается в нижней панели FireFox:
zwordpress active blog toolbar

И всё бы хорошо, да у меня на комбинации Alt+Z уже долгие годы стоит хоткей в WinAmp, поэтому думаю плагин не приживется, но может у кого-то он найдёт применение.


Хоть и обещал вывесить новые смайлы, но пока что занят редизайном темы под один новый проект, но между тем стараюсь не забрасывать старые плагины и наработки. Сейчас тестирую вывод кол-ва загрузок для DownloadCounter Mod Rus в произвольном месте поста.
Попутно обновил плагины — убил Tiger Admin и поставил вместо него Advanced-Admin-Menus (Евгений, ты о нём говорил?), а так же взял у ЛеКактуса переведенный Simple Tags, быстренько проставил метки на старые записи и наконец-то обзавелся WP-23-RelatedPosts.
Работает он только с 2.3 версией и выбирает посты исходя из тэгов.
И всё же интересно, а может есть какой-то плагин хоткеев для ВордПресс?

Тэги и новые переменные в WordPress 2.3

В который уже раз напомню (а то вдруг есть такие, кто не знают), но в WordPress 2.3 появилась встроенная поддержка тэгов. Не бог весть как реализованная, но тем не менее.

Как же ими пользоваться грамотно?
Для начала стоит понять, что для получения списка постов по определенному тэгу достаточно указать его в УРЛ после /tag/, т.е. название_блога.ру/tag/тэг_который_ищем.

С этим всё просто. Теперь более сложные варианты:
а) логическое «ИЛИ»
Если нужно выбрать все посты, которые содержат один из указанных тэгов, то перечисляем их через запятую, например:
название_блога.ру/tag/тэг1,тэг2,тэг3

б) логическое «И»
Если нужно выбрать посты, отмеченные несколькими тэгами, то делаем это через «+»:
название_блога.ру/tag/тэг1+тэг2+тэг3

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

Ну и, чтобы пост не был столько мелким, небольшое добавление для людей, пишущих плагины и/или темы для WordPress.
Если есть необходимость в фильтрации постов, то добавляем обработчик на parse_request (при помощи add_action) и уже в теле обработчика устанавливаем фильтры при помощи $wp->set_query_var().

Список доступных переменных:
category__in — передаётся массив с ID категорий. На выходе — посты, из любой из переданных категорий.
category__not_in — передаётся массив с ID категорий. На выходе — посты, находящиеся вне перечисленных категорий.
category__and — передаётся массив с ID категорий. На выходе — посты, находящиеся сразу во всех перечисленных категориях.
tag__in — передаётся массив с ID тэгов. На выходе — посты, с любым из переданных тэгов.
tag__not_in — передаётся массив с ID тэгов. На выходе — посты, без отметки переданными тэгами.
tag__and — передаётся массив с ID тэгов. На выходе — посты, отмеченные сразу всеми переданными тэгами.
tag_slug__in — передаётся текстовый массив имен тэгов. На выходе — посты, с любым из переданных тэгов.
tag_slug__and — передаётся текстовый массив имен тэгов. На выходе — посты, отмеченные сразу всеми переданными тэгами.

Удачи всем в плагино-писательстве.