вход

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

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 готовых дизайнов. Шаблоны сайтов + установка + хостинг + персонализация + поисковая оптимизация + копирайтинг — все эти услуги вы всегда можете получить от профессионалов мирового уровня!


Нашли это полезным? Поделитесь с другими:
Не останавливайтесь, читайте дальше:
6 комментариев

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

  1. AlexGrRu:

    Огромное спасибо за статью. все получилось.

  2. Все написано вполне доступно, но мне по прежнему не понятно многое (( Я новичок. Столкнулась с очень капризной темой, нет обычных тегов. В “редакторе” почти ничего не изменить. Что делать?
    Например, мне нужно вставить шорткод в functions.php. Куда именно вставлять? Между какими тегами? Или нужно перед всеми тегами или после?

  3. Wasija:

    Добрый день. Огромная просьба помочь правильно вставить с помощью шорткода видео с ютюба. Дело в том, что на старом шаблоне все работало ютюб видео вставлялось таким образом [youtube_link]6M4pZ1L6a4c[/youtube_link]. Сайт музыкальный, и чтобы не редактировть более тысячи страниц, надо вставлять видео именно таким образом. Вставляю в файл functions.php вот такой код который ниже, все работает, только когда при открытии нового поста с видео мелькает белый экран, спасибо за помощь!

    /* Youtube link shortcode */

    function my_shortcode ()

    function youtube_link_shortcode ( $atts, $content = null ) {

    return “”;

    }

    add_shortcode (‘youtube_link’, ‘youtube_link_shortcode’);

    /* Youtube link shortcode end */

    А вот стиль:

    .youtube_video {

    width: 100%;

    height: 300px;

    }

    .youtube_video embed{

    width: 100%;

    height: 300px;

    }

    Что не так, надеюсь на вас. Проблема в какой-то мелочи но понять не могу. Спасибо.

  4. Добрый день! Хочу попросить у Вас помощи. Мне надо на странице своего сайта http://avto-shopping.com.ua/kupit-akkumulyator-ista-60/, разместить контент, который находится вот по такой ссылке http://avto-shopping.com.ua/category/akkumulyatoryi/ista/?filtering=1&filter_emkost=549

    Я понимаю, что это технически можно сделать с помощью шорт кода, но не знаю как. С нетерпением жду ответа))).

  5. Andrey:

    Поклон до земли! А я то думал, что за хрень))))

  6. Рафаэль:

    классно так просто написано, понятно, но всё равно не получилось сделать шорткод для плагина. Помогите сделать шорткод для плагина Affiliate Plus ?

Оставить комментарий

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

Правила комментирования

  1. Кoммeнтapий всегда проходит премодерацию.
  2. В поле "URL блога" можно указывать только ссылку на главную страницу вашего блога. Ссылки на прочие веб-ресурсы (в том числе блоги/сплоги, созданные не для людей) будут удалены.
  3. Запрещается использовать в качестве имени комментатора слоганы/названия сайтов, рекламные фразы, ключевые и т.п. слова. В случае несоблюдения этого условия имя изменяется по усмотрению владельца блога. Просьба указывать нормальное имя или ник.
  4. Весьма вероятно, что короткий и неинформативный кoммeнтapий вида "Спасибо!", "Интересная статья", будет удален. Исключение составляют знакомые автору блога комментаторы.