WordPress. Что такое шорткод
10.06.2019
Теги: CMS • Web-разработка • WordPress • Функция
Шорткоды — это функции PHP, которые можно задействовать внутри содержимого поста, используя условные обозначения. Например, стандартный вордпрессовский шорткод [gallery]
позволяет вывести галерею внутри поста. Так же, как у функции могут быть аргументы, так и шорткод может иметь собственные параметры.
[gallery size="large" ids="12345,12346,12347"]
Создание шорткода
Создать свой шорткод не труднее, чем написать собственную функцию PHP. Например, создадим шорткод [home_url]
, который при вставке в пост будет выводить ссылку на главную страницу сайта.
add_shortcode('home_url', function() { return '<a href="' . home_url('/') . '">Домашняя страница</a>'; });
После того, как мы добавим этот код в файл functions.php
, созданный шорткод уже можно использовать внутри поста. Это возможно потому, что WordPress сам обрабатывает шорткоды, без дополнительных усилий с нашей сторны. В этом можно убедиться, если заглянуть в исходный код файла default-filters.php
в директории wp-includes
:
add_filter('the_content', 'do_shortcode', 11);
Шорткод с параметрами
В качестве примера создадим шорткод, который позволит вставлять в посты ссылку на блог.
add_shortcode('home_url', function($atts) { $params = shortcode_atts( [ // значения параметров по умолчанию 'text' => 'Узелки на память', 'href' => 'https://tokmakov.msk.ru', ], $atts ); $home_url = '<a href="' . $params['href'] . '">' . $params['text'] . '</a>'; return $home_url; });
Наш шорткод имеет два параметра — text
и href
. При использовании этого шорткода внутри поста могут быть заданы оба параметра, только один или вообще ни одного. Если какой-либо параметр не указан, будет использовано значение по умолчанию.
[home_url] [home_url text="Мой блог"] [home_url text="Мой блог" href="https://tokmakov.msk.ru/blog"]
Шорткод с контентом
Давайте возьмём шорткод из предыдущего примера и немного переделаем его, чтобы можно было использовать такие варианты:
[home_url]Мой блог[/home_url] [home_url href="https://tokmakov.msk.ru/blog"]Мой блог[/home_url]
В этом случае у функции-обработчика шорткода будет еще один аргумент $content
:
add_shortcode('home_url', function($atts, $content) { $params = shortcode_atts( [ // значения параметров по умолчанию 'href' => 'https://tokmakov.msk.ru', ], $atts ); if (empty($content)) { $content = 'Узелки на память'; } $home_url = '<a href="' . $params['href'] . '">' . $content . '</a>'; return $home_url; });
Применение шорткода
Функция do_shortcode()
просматривает текст на наличие в нем шорткодов и применяет зарегистрированные функции к найденным шорткодам.
do_shortcode($content, $ignore_html);
$content
(строка, обязательный). Текст в котором нужно преобразовать шорткоды. По умолчанию: нет.$ignore_html
(строка). Игнорировать ли шорткоды внутри HTML. Если поставитьtrue
, то шорткоды внутри HTML обработаны не будут. По умолчанию:false
.
Как нетрудно догадаться, аргумент $content
может содержать только шорткод. В этом случае функция вернет результат обработки шорткода:
$result = do_shortcode('[somename]');
Давайте получим контент записи и обрабатаем в нем все шорткоды:
$content_shortcoded = do_shortcode(get_the_content());
Добавим обработку шорткодов для контента стандартного виджета «HTML-код»:
add_filter('widget_custom_html_content', 'do_shortcode');
А вот для стандартного виджета «Текст» этого делать не нужно. WordPress сам обрабатывает шорткоды для контента этого виджета. В этом нетрудно убедиться, если еще раз заглянуть в исходный код файла default-filters.php
:
add_filter('widget_text_content', 'do_shortcode', 11);
Другие функции для работы с шорткодами
has_shortcode()
— проверяет, есть ли в переданном тексте указанный шорткод.remove_shortcode()
— удаляет функцию-обработчик для указанного шорткода.remove_all_shortcodes()
— удаляет все зарегистрированные шорткоды.shortcode_exists()
— проверяет, зарегистрирован ли указанный шорткод.strip_shortcodes()
— вырезает все шорткоды из переданного текста.
Поиск: CMS • Web-разработка • WordPress • Функция • Шорткод • Shortcode • add_shortcode • do_shortcode