WordPress. Что такое шорткод

10.06.2019

Теги: CMSWeb-разработка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

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.