Шорткоды — один из самых мощных инструментов WordPress, который позволяет внедрять динамический контент в посты, страницы или виджеты. В этой статье разберем, как создать собственный шорткод в плагине, научим его принимать параметры (атрибуты) и выводить динамические данные — например, форму фильтра с настраиваемыми полями.
Что такое шорткод и зачем он нужен
Шорткод — это короткий код в квадратных скобках, например:
[my_shortcode]
Когда WordPress встречает такой код в контенте, он вызывает соответствующую PHP-функцию и подставляет её результат на место этого шорткода.
Это удобно, если нужно, например, встроить форму фильтра, список товаров или блок с динамическими данными внутрь любой записи.
Базовая регистрация шорткода
Создадим класс, который будет отвечать за регистрацию и обработку шорткода. Пусть он будет называться AliProperty_Shortcode.
class AliProperty_Shortcode {
public function __construct() {
add_action('init', [$this, 'register_shortcode']);
}
public function register_shortcode() {
add_shortcode('ali_filter', [$this, 'filter_shortcode']);
}
public function filter_shortcode($atts = [], $content = null) {
return 'Filter shortcode is working!';
}
}
После этого создаем экземпляр класса в основном файле плагина:
new AliProperty_Shortcode();
Теперь, если в посте написать шорткод в квадратных скобках ali_filter, WordPress заменит его на текст “Filter shortcode is working!”.
Передача атрибутов в шорткод
Чтобы сделать шорткод динамическим, добавим возможность передавать параметры. Например:
[ali_filter location="1" type="1" price="0"]
А в коде получим их так:
public function filter_shortcode($atts = [], $content = null) {
$atts = shortcode_atts([
'location' => 0,
'type' => 0,
'price' => 0,
'offer' => 0,
'agent' => 0,
], $atts, 'ali_filter');
// Дальше можно использовать $atts['location'], $atts['type'] и т.д.
}
Если параметр не передан, он возьмет значение по умолчанию. Это избавляет от ошибок и делает шорткод универсальным.
Передача контента между тегами
Помимо атрибутов, шорткоды могут содержать и контент между открывающим и закрывающим тегами:
[ali_filter]Привет, это внутренний контент[/ali_filter]
Второй аргумент функции шорткода $content хранит это значение, и вы можете использовать его в выводе:
return '<div>' . esc_html($content) . '</div>';
Создание динамического HTML-вывода
Теперь добавим вывод реальной формы фильтра с условной логикой — какие поля показывать, а какие нет.
public function filter_shortcode($atts = [], $content = null) {
$atts = shortcode_atts([
'location' => 1,
'type' => 1,
'price' => 1,
'offer' => 1,
'agent' => 1,
], $atts, 'ali_filter');
$output = '<form method="get" action="' . esc_url(get_post_type_archive_link('property')) . '">';
if ($atts['location']) {
$output .= '<label>Локация</label><input type="text" name="location">';
}
if ($atts['type']) {
$output .= '<label>Тип</label><select name="type"><option>Дом</option><option>Квартира</option></select>';
}
if ($atts['price']) {
$output .= '<label>Цена до</label><input type="number" name="price">';
}
if ($atts['offer']) {
$output .= '<label>Тип предложения</label><select name="offer"><option>Продажа</option><option>Аренда</option></select>';
}
if ($atts['agent']) {
$output .= '<label>Агент</label><select name="agent"><option>Иванов</option><option>Петров</option></select>';
}
$output .= '<button type="submit">Фильтровать</button>';
$output .= '</form>';
return $output;
}
Теперь каждый параметр управляет отображением конкретного поля формы.
Например,
[ali_filter price="0" agent="0"]
ыведет форму без поля цены и выбора агента.
Использование шорткода в разных местах
Созданный шорткод можно использовать:
- в тексте поста или страницы;
- внутри виджета “Текст” (включите поддержку шорткодов в виджетах);
- в Elementor, Gutenberg, WPBakery и других конструкторах;
- в PHP-коде темы через
echo do_shortcode('[ali_filter]');.
WordPress автоматически заменяет шорткод на результат функции, где бы он ни находился.
Пример динамического поведения
Предположим, вы публикуете статью о недвижимости и хотите вставить интерактивный фильтр, чтобы пользователь сразу мог выбрать параметры поиска.
Вставьте просто:
[ali_filter location="1" type="1" price="1" offer="1" agent="0"]
Теперь прямо в тексте статьи появится форма фильтра, которая отправляет пользователя на архивную страницу со списком подходящих объектов.
Заключение
Шорткоды позволяют создавать гибкие и переиспользуемые блоки функционала без дублирования кода.
Добавив поддержку атрибутов, вы можете легко управлять поведением этих блоков прямо из контента.
Создайте собственный шорткод в плагине WordPress — и превратите статические страницы в динамические инструменты взаимодействия с пользователем.