Шорткоды

Дата публикации:Декабрь 12, 2010

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

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

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

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

Создание собственного шорткода

WordPress включает в себя API шорткодов, что значительно облегчает процесс создания собственных шорткодов. Создадим шорткод, который будет ответственен за реализацию цитат (pullquotes). Текстовый редактор, включенный в WordPress по умолчанию, имеет стандартное средство для отображения цитат — blockquote, — однако оно довольно ограничено в своих возможностях. Наши цитаты, реализованные с помощью шорткода, позволят дополнительно определять ширину и указывать автора.

Разметка цитаты в HTML будет выглядеть следующим образом:

<blockquote>
<p>Maecenas ante nisi, placerat … </p>
<cite> &mdash; Allan Cole</cite>
</blockquote>

Технически пользователь может вставить приведенную разметку в бэкэнд WordPress при помощи HTML-редактора. Однако, представьте себе, как утомительно раз за разом вручную вставлять весь необходимый код, добавлять корректные классы и при этом не допускать ошибок. Шорткоды позволяют значительно ускорить данный процесс, исключив из него какие-либо неверные действия. Вместо того, чтобы вводить код, приведенный в примере выше, пользователь мог бы просто указать следующую строку:

[ pullquote width="400" author="Allan Cole" ]Maecenas … [ /pullquote ]

Также как и HTML, шорткоды могут иметь открывающие и закрывающие теги. Для того чтобы добавить произвольный шорткод, нам понадобится создать функцию, принимающую два параметра: $atts и $content. Первый параметр включает в себя опции, обеспечиваемые шорткодом, а второй — содержит контент, размещенный между открывающим и закрывающим тегами шорткода. Сначала мы извлекаем атрибуты, хранящиеся в $atts, которые будут выступать в качестве значений по умолчанию; затем мы возвращаем требуемый вывод, включающий в себя полученный контент и атрибуты:

function pull_quote_sc($atts, $content = null) {
extract(shortcode_atts(array(
'width' => '600',
'author' => '',
), $atts));
if (!$author == '') {
$authorname = '<cite><em>' . esc_attr($author) . '</em></cite>';
} else {
$authorname = null;
}
return '<blockquote style="width=' . esc_attr($width) . '">
<p>' . $content . '</p>' . $authorname . '</blockquote>';
}

Затем следует вызов функции add_shortcode, которая передает название нашего шорткода, а также контент, размещенный в нем:

add_shortcode("pullquote", "pull_quote_sc");

На последнем шаге нам понадобится определить некоторые стили для цитат. Для этого мы добавим класс pullquote к элементу blockquote, который позволит нам определить стили для цитат. В теме можно будет использовать как стандартные цитаты, так и цитаты, добавляемые с помощью шорткода, причем они будут различаться между собой. Ниже приведены некоторые базовые стили:

blockquote.pull-quote {
border-left: 1px dotted #CCC;
padding: 5px 0 5px 20px;
}blockquote.pull-quote cite {
display: block;
text-align: right;
}

blockquote.pull-quote cite:before {
content: "— ";
}

blockquote.pull-quote p {
font-size: 1.5em;
line-height: 1.1em;
}
Поделиться

Один комментарий

  1. HotIce says:

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

    function short(){

    ob_start();

    function_out(); //наша функция, ради которой весь сыр-бор

    $out_string=ob_get_contents(); // out_string – переменная результата

    ob_end_clean();

    return $out_string;

    }

    add_shortcode('la-la', 'short');

    с функцией очистки буфера, до конца не разобрался. ПХП-шники их юзают разные, в количестве четыре штуки, иногда одну за другой. Если кто знает че там за танцы, было бы интересно поглядеть. А то у меня предчувствие, что я не в последний раз это использую. Слишком уж мне подобный механизм в голову запал когда MODx крутил.

Добавить комментарий для HotIce Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

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

Предыдущая запись:

Следующая запись: