Как создать шорткоды для WordPress


Множество плагинов и тем для системы WordPress активно используют различные "шаблонные теги" PHP, которые активно вставляются в файлы тем, чтобы быстро добавить информацию или вызвать нужные функции. Однако такие теги PHP не могут по умолчанию использоваться непосредственно в содержимом ваших постов. Для решения этой проблемы, начиная с версии WordPress 2.5 введена поддержка шорткодов. Шорткоды это очень простой, но эффективный способ вставки различных типов содержимого в свои сообщения в системе WordPress.

Шорткоды представляют собой текст заключенный в квадратные скобки. Вы уже наверное знаете о встроенном шорткоде WordPress для создания галерей, который называется {gallery}. Шорткоды могут быть простыми, состоящими из одноего емкого слова, например:

[myshortcode]

Кроме этого, они могут включить и атрибуты:

[myshortcode url="http://mainview.ru" id="72"]

И даже использовать небольшой контент, или строки:

[myshortcode url="http://mainview.ru"]
Мой блог mainview.ru!
[/myshortcode]

Сегодня, Вы узнаете, как создавать ваши собственные шорткоды, которые вы сможете использовать в ваших постах в системе WordPress.

Как создать шорткоды для WordPress

Сразу оговорюсь, что весь PHP кодв этой статье должен быть использован либо в файле функций вашей темы (functions.php), или в файле плагина для WordPress. Если Вы до этого еще никогда не создавали бы плагины WordPress, и для вас это представляет трудности, то вам вероятно лучше просто добавлять ваш код в файл функций functions.phpвашей темы. (Если этот файл не существует, просто создайте такой файл!)

Функция шорткода

Сначала, нам нужно создать собственно саму функцию PHP, которая будет выполнять то, для чего наш шорткод и предназначен. Попросту эта функция и будет выполнять всю работу. В дальнейшем нам останется только определить способы её вызова в нужном нам месте. Например создадим простейшую функцию, которая будет выводить простую ссылку на мой блог. Согласитесь, гораздо проще в тексте поставить шорткод [myshortcode], чем каждый раз набирать саму ссылку.

function my_shortcode_function() {
return '<a href="http://mainview.ru" title="Main View – блог о веб дизайне и веб разработке">
Main View – блог о веб дизайне и веб разработке</a>';
}

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

add_shortcode('myshortcode', 'my_shortcode_function');

Вот и все! Теперь вы просто используете в тексте шорткод [myshortcode], и он автоматически будет заменён на результат работы нашей функции. А функция как раз и выводит ссылку на блог:

<a href="http://mainview.ru" title="Main View – блог о веб дизайне и веб разработке">
Main View – блог о веб дизайне и веб разработке
</a>

Атрибуты в шорткодах

Шорткоды поддерживают и пользовательские атрибуты. Например, выше в функции мы жестко определили вывод одной конкретной ссылки. Используя атрибуты мы можем получить более гитбкое решение. Если атрибут не задан, то будет выводиться ссылка по умолчанию, а если задан, то ссылка в атрибуте. Самое время немного изменить нашу функцию:

function my_shortcode_function($atts) {
extract(shortcode_atts(array(
"href" => 'http://mainview.ru',
"title" => 'Main View – блог о веб дизайне и веб разработке'
), $atts));
return '<a href="'.$href.'" title="'.$title.'">'.
'Main View – блог о веб дизайне и веб разработке</a>';
}

В этом примере, мы используем массив. Мы создали аттрибут hrefсо значением по умолчанию 'http://mainview.ru', и аттрибут titleсо значением по умолчанию 'Main View – блог о веб дизайне и веб разработке'. Как я уже говорил, значения по умолчанию используются в том случае, когда атрибуты не определены.

Теперь, если сделать вызов шорткода в тексте с указанием других значений, например:

[myshortcode href="http://mainview.ru/wordpress/" title="Осваиваем WordPress"]

то наша функция выведет именно вновь указанные значения:

<a href="http://mainview.ru/wordpress/" title="Осваиваем WordPress">
Main View – блог о веб дизайне и веб разработке
</a>

Технически вы можете определить столько атрибутов, сколько захотите, но не думаю, что на практике вы захотите применять боле двух, трех параметров.

Контент в шорткодах

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

function my_shortcode_function($atts, $content='Main View') {
extract(shortcode_atts(array(
"href" => 'http://mainview.ru',
"title" => 'Main View'
), $atts));
return '<a href="'.$href.'" title="'.$title.'">'.$content.'</a>';
}

Заметьте, что мы присвоили начальное значение переменной $content на тот случай, если ничего не будет задано
Теперь попробуем вызвать функцию шорткода в тексте так:


[myshortcode href="http://mainview.ru/wordpress/" title="Осваиваем WordPress"]
Все о системе WordPress
[/myshortcode]

В итоге мы увидим, что вывелся следующий результат:

<a href="http://mainview.ru/wordpress/" title="Осваиваем WordPress">
Все о системе WordPress
</a>

Почему содержимое шорткода всегда выводиться перед содержимым поста!

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

function some_function() {
echo 'Это напечатано при помощи функции some_function().';
}
function my_shortcode_function() {
return some_function();
}

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

Для решения этой проблемы вы должны просто включит буферизацию вывода:

function some_function() {
echo 'Это напечатано при помощи функции some_function().';
}

function my_shortcode_function() {
ob_start();
some_function();
$output_string=ob_get_contents();
ob_end_clean();

return $output_string;
}


Начните кодировать!

На этом все! Теперь вы можете самостоятельно создавать любые шоткоды для использования в ваших постах в системе WordPress.

 

Реклама
Поделиться
Качественные премиум темы и шаблоны для Вашего сайта:

Смотреть полный каталог качественных тем и шаблонов

Здесь Вы можете выбрать из более чем 46 000 готовых дизайнов. Шаблоны сайтов + установка + хостинг + персонализация + поисковая оптимизация + копирайтинг — все эти услуги вы всегда можете получить от профессионалов мирового уровня!

7 комментариев

  1. Xacatel05/10/2017
  2. Рафаэль28/04/2016
  3. Andrey13/03/2016
  4. Валерий12/01/2016
  5. Wasija20/03/2014
  6. Инна26/05/2013
  7. AlexGrRu25/04/2011

Добавить коментарий

пять × 1 =