Создание шорткодов (shortcodes) WordPress

Здравствуйте, уважаемые читатели XoZbloga. WordPress дает разработчику широкий спектр инструментов для организации удобной работы с системой. Одним из таких инструментов является Shortcode API, простой набор функций для создания макро-кодов, используемых в тексте записей на блоге.

Что такое Шорткод (Shortcode)?

Короткие коды были введены в WordPress 2.5. Шорткод можно представить как ярлык исполняемого файла в Windows, который ссылается непосредственно на .exe файл. Так же и здесь, можно один раз описать исполняемый код, который будет вызываться через шорткод из статьи или шаблона. Допустим, Вы написали функцию которая возвращает список самых популярных статей в какой-либо категории и создали шорткод для ее вызова, теперь в любом месте на сайте вы можете использовать вот такую конструкцию [most_popular_post category=»Бизнес»], для вывода этого списка. Данная возможность позволяет значительно экономить время при использовании WordPress.

WordPress Shortcodes

Как создается Шорткод?

Короткие коды работают как фильтры WordPress, принимают параметры (атрибуты) и возвращают некий обработанный результат. Для этого: Вы должны определить функцию обработчика, которая анализирует shortcode и возвращает результат обработки. Затем зарегистрировать shortcode (вызывающий функцию обработчик) с помощью функции add_shortcode(‘name_shortcode’,’name_func’), которая принимает 2 атрибута:

  • ‘name_shortcode’ — название шорткода;
  • ‘name_func’ — название функции обработчика.

Функция обработчика принимает до трех аргументов, перечисленных ниже:

  • $atts — массив с атрибутами (и значениями) шорткода (например [myshortcode id=»1″]);
  • $content — Любое содержимое, которое находится в ограничении шорткода (например [myshortcode]Здесь, то самое содержимое[/myshortcode]);
  • $tag — используется обычно тогда, когда один и тот же обработчик используется для нескольких коротких кодов.

Давайте разберем на нескольких примерах, как могли бы выглядеть эти аргументы:

1
[myshortcode]
  • $atts = array()
  • $content = null
1
[myshortcode]Обычный контент статьи...[/myshortcode]
  • $atts = array()
  • $content = Обычный контент статьи…
1
[myshortcode id="555" name="Имя"]
  • $atts = array(‘id’ => ‘555’, ‘name’ => ‘Имя’)
  • $content = null
1
[myshortcode id="555" name="Имя"]Обычный контент статьи...[/myshortcode]
  • $atts = array(‘id’ => ‘555’, ‘name’ => ‘Имя’)
  • $content = Обычный контент статьи…

Создание шорткода WordPress с параметрами

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function display_latest_post($atts)
{
    // Получаем значения атрибутов
    // если значения не были указаны определяем свои
    extract( shortcode_atts( array(
        'numberofpost' => '3', // количество запрашиваемых записей
        'categoryid' => '', // id категории
    ), $atts ) );
    // объявляем переменную для возврата
    $result = '';
    // формируем текст запроса
    $querystring = 'posts_per_page='.$numberofpost;
    if(strlen($categoryid) > 0)
        $querystring .= '&cat='.$categoryid;
    // выполняем запрос
    $query = new WP_Query( $querystring );
    // Цикл, пока есть записи
    while ( $query->have_posts() ) : $query->the_post();
        // формируем список
        $result.= '<li>';
        $result.= '<a href="'.get_permalink().'">'.get_the_title().'</a>';
        $result.= '</li>';
    endwhile;
 
    // После цикла, восстанавливаем текущую запись в $post
    wp_reset_postdata();
 
    // Возвращаем результат - список
    return $result;
}

// регистрируем шорткод
add_shortcode( 'dlp', 'display_latest_post' );

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

Создание shortcodes WordPress

Обработка контента

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

1
2
3
4
5
6
.content_info {
     background: #ccc url("images.png") no-repeat 20px 50%;
     border: 1px solid #666;
     padding: 10px;
     margin: 5px;
}

Обработчик выглядит так:

1
2
3
4
5
function content_info_function($attr,$content = null) {
   return '<div class="content_info">'.$content.'</div>';
}
// регистрируем шорткод
add_shortcode( 'info', 'content_info_function' );

Shortcode content

Использование шорткодов

Итак, создавать shortcodes WordPress научились, теперь о том как их использовать при работе. Конечно можно не загружаться и писать все ручками, но такой способ подходит если используется шорткод в статье один или два раза, а если больше?! А если больше, то лучшим выходом будет создать кнопочку в редакторе, для вызова шорткода. Для этой цели я пользуюсь плагином AddQuicktaghttp://wordpress.org/extend/plugins/addquicktag/

Плагин для WordPress AddQuicktag

Первая колонка имя кнопки, потом заголовок кнопки, далее идет поле для ввода шорткода или просто разметки и следом за ним поля для закрывающегося шорткода или разметки. Можно также настроить отображение кнопок, есть инструмент экспорт/импорт настроек.

Использование шорткода в теме

До сих пор мы рассматривали использование шорткода в тексте статьи. Но мы также можем использовать shortcode в шаблонах или как часть функции в плагине. Это можно сделать с помощью функции do_shortcode.

Do_shortcode принимает в качестве аргумента название шорткода. Используется данная функция с конструкцией echo:

1
<?php echo do_shortcode('[myshortcode]'); ?>

Другие полезные функции WordPress Shortcode

На последок, давайте рассмотрим несколько полезных функций, связанных с шорткодами.

  • remove_shortcode(‘myshortcode’) — Эта функция удаляет шорткод, который ранее был добавлена ​​с помощью add_shortcode. В качестве аргумента название шорткода.
  • remove_all_shortcodes() — Эта функция удаляет все шорткоды.
  • strip_shortcodes($content) — Эта функция удаляет все шорткоды из контента, который был передан в качестве параметра. Эта функция может быть полезна в случае, если вы хотите убрать короткие коды с определенной страницы и тд.

Вот пример функции, которая очищает контент от шорткодов на главной странице:

1
2
3
4
5
6
7
8
9
10
function remove_shortcode_from_index($content) {
  // если это главная страница
  if ( is_home() ) {
    // очищаем контент от коротких кодов
    $content = strip_shortcodes( $content );
  }
  return $content;
}
// добавляем фильтр
add_filter('the_content', 'remove_shortcode_from_index');

Чтобы оставаться в курсе свежих статей и уроков следите за XoZblog в Facebook или добавляйте в круги на Google+. Не забывайте оставлять комментарии к статьям и урокам. Спасибо!

Чтобы оставаться в курсе свежих статей и уроков подписывайтесь на еженедельную почтовую рассылку или на новостную ленту RSS. Спасибо!


Lingualeo