WordPress: как сделать шорткод

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

Шорткоды — это удобный способ добавлять на сайт различные элементы и функциональность с помощью простых команд в квадратных скобках []. Для избежания конфликтов с другими шорткодами, каждому шорткоду присваивается уникальное имя.

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

Первый Шорткод.

Процесс создания шорткода можно разделить на две части:

  • Создание функции, которая будет вызываться коротким кодом [шорткод].
  • Регистрация шорткода с уникальным именем.

Шорткоды прописываются в файле functions.php. Он находится внутри вашей темы. Давайте создадим простейший шорткод, который будет выводить какую-нибудь надпись.

function new1() {
return '<p>Автор: Пупкин В.</p>';
}
add_shortcode ('author','new1');

Вызов: [author]

Пояснение. Пишем функцию с уникальным именем. В приме используется название «new1». Дальше прописываются двойные круглые скобки () — они предназначены для параметров. Открываются фигурные скопки {…}, внутри которых создаем функцию. И в конце заканчивается функцией обработчика

add_shortcode ('короткий код для вызова', какую именно функцию вызывать');

И теперь, чтобы вызвать эту функцию, достаточно вставить короткий код [author] в любом месте вашего сайта, где нужно вывести его содержимое. В данном случае это — «Автор: Пупкин В.»

Как вывести шорткод в PHP-файле

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

<?php
// Вывод шорткода
echo do_shortcode('[ваш шорткод]'); ?>

Поддержка шорткодов в разных местах сайта

Изначально WordPress не поддерживает шорткоды в виджетах (сайдбар). Но не беспокойтесь. Есть простое решение — добавьте всего лишь несколько строк кода в ваш файл functions.php, и вы сможете использовать шорткоды в разных разделах вашего сайта, включая виджеты.

add_filter('widget_text', 'do_shortcode'); — Поддержка в сайдбаре

add_filter( 'comment_text', 'do_shortcode' ); — Поддержка в комментариях

add_filter( 'the_excerpt', 'do_shortcode'); — Поддержка в анонсе статьи

Вывод последних постов через шорткод

Создавать функции в шорткоде можно любой сложности, все зависит от знаний. К примеру, давайте создадим вывод последней добавленной статьи.

function recent_posts_function() {
   query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => 1));
   if (have_posts()) :
      while (have_posts()) : the_post();
         $return_string = ''.get_the_title().'';
      endwhile;
   endif;
   wp_reset_query();
   return $return_string;
}
add_shortcode('recent-posts', 'recent_posts_function');

Первым у нас идет функция и ее уникальное название recent_posts_function. Дальше происходит обращение к базе для обратного вызова. В нашем случае — это последний добавленный пост (тут 'showposts' => 1 можно изменить количество постов) на сайте. И добавляем шорткод:

Вызов: [recent-posts]

Параметры Шорткода

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

Для реализации этой функциональности, мы будем использовать две функции. Первая из них встроенная в WordPress — shortcode_atts(), которая объединяет атрибуты шорткода с атрибутами по умолчанию, если они не указаны. Вторая функция — extract(), создает переменные из массива, чтобы упростить работу с атрибутами шорткода.

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

function recent_posts_function($atts){
   extract(shortcode_atts(array(
      'posts' => 1,
   ), $atts));

   $return_string = '<ul>';
   query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => $posts));
   if (have_posts()) :
      while (have_posts()) : the_post();
         $return_string .= '<li>'.get_the_title().'</li>';
      endwhile;
   endif;
   $return_string .= '</ul>';
   wp_reset_query();
   return $return_string;
}
add_shortcode('recent-posts', 'recent_posts_function');

Вызов: [recent-posts posts="5"]

Примеры разных шорткодов

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

Карта Google.

function googlemap_function($atts, $content = null) {
   extract(shortcode_atts(array(
      "width" => '640',
      "height" => '480',
      "src" => ''
   ), $atts));
   return '<iframe width="'.$width.'" height="'.$height.'" src="'.$src.'&output=embed" ></iframe>';
}
add_shortcode("googlemap", "googlemap_function");

Вызов:

[googlemap width="600" height="300" src="http://maps.google.com/maps?q=Heraklion,+Greece&hl=en&ll=35.327451,25.140495&spn=0.233326,0.445976& sll=37.0625,-95.677068&sspn=57.161276,114.169922& oq=Heraklion&hnear=Heraklion,+Greece&t=h&z=12"]

Шорткоды WordPress

Диаграмма Google

function chart_function( $atts ) {
   extract(shortcode_atts(array(
       'data' => '',
       'chart_type' => 'pie',
       'title' => 'Chart',
       'labels' => '',
       'size' => '640x480',
       'background_color' => 'FFFFFF',
       'colors' => '',
   ), $atts));

   switch ($chart_type) {
      case 'line' :
         $chart_type = 'lc';
         break;
      case 'pie' :
         $chart_type = 'p3';
         break;
      default :
         break;
   }

   $attributes = '';
   $attributes .= '&chd=t:'.$data.'';
   $attributes .= '&chtt='.$title.'';
   $attributes .= '&chl='.$labels.'';
   $attributes .= '&chs='.$size.'';
   $attributes .= '&chf='.$background_color.'';
   $attributes .= '&chco='.$colors.'';
   return '<img title="'.$title.'" src="http://chart.apis.google.com/chart?cht='.$chart_type.''.$attributes.'" alt="'.$title.'" />';
}
add_shortcode('chart', 'chart_function');

Вызов:

[chart type="pie" title="Example Pie Chart" data="41.12,32.35,21.52,5.01" labels="First+Label|Second+Label|Third+Label|Fourth+Label" background_color="FFFFFF" colors="D73030,329E4A,415FB4,DFD32F" size="450x180"]

Шорткоды WordPress

Контент только для зарегистрированных

function cwc_member_check_shortcode( $atts, $content = null ) {
         if ( is_user_logged_in() && !is_null( $content ) && !is_feed() )
                return $content;
        return '';
}
add_shortcode( 'member', 'cwc_member_check_shortcode' );

Вызов: [member]Этот текст увидит только зарегистрированный пользователь.[/member]

Встраивание PDF

function pdf_function($attr, $url) {
   extract(shortcode_atts(array(
       'width' => '640',
       'height' => '480'
   ), $attr));
   return '<iframe src="http://docs.google.com/viewer?url=' . $url . '&embedded=true" style="width:' .$width. '; height:' .$height. ';">Your browser does not support iframes</iframe>';
}
add_shortcode('pdf', 'pdf_function');

Вызов:

[pdf width="520px" height="700px"]http://static.fsf.org/common/what-is-fs-new.pdf[/pdf]

Шорткоды WordPress

Плагины для Шорткодов

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

Подробнее читайте в этой статье

5 комментариев
  1. Здравствуйте!

    Подскажите, пожалуйста, как ввернуть в тело шоткода проверку на пустой аттрибут?

    Например, есть аттрибуты: name1, name2, name3

    Вывод:

    Раз: ' . $name2 . ', Два: ' . $name1 . ', Три: ' . $name3 . '

    Как сделать проверку, что, если name1 пустой, то "Раз: ' . $name2 . ', " не выводить?

    Заранее спасибо!

    1. День добрый. Это делается с помощью условия if у вас есть какие-нибудь навыки в php?

  2. Блин, я перечитала свой коммент и ужаснулась: всё перепутала. 🙂

    Поправочки:

    *

    Раз: ' . $name1 . ', Два: ' . $name2 . ', Три: ' . $name3 . '

    *

    если name1 пустой, то "Раз: ' . $name1 . ', " не выводить

    Вот. 🙂

  3. А не в курсе если тема старая и не поддерживает шорткоды, что делать? В functions.php что-то нужно прописать?

    1. Ксения, смотря где вставляете шорткод, к примеру, в сайдбаре, то да. А так нет.

Оставить ответ

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