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

Шорткод для вставки ссылки на другую запись по её ID


<?php

add_shortcode('link', function($attrs){
    if (empty($attrs[0])) {
        return false;
    }

    $id = intval($attrs[0]);

    return $id ? get_permalink($id) : false;
});

Функция add_shortcode позволяет добавлять шорткоды для их дальнейшего использования. В приведённом примере, ей передаётся анонимная функция, которая генерирует вывод ссылки. Переданный callback сам не должен производить никакого вывода (допустимо только на момент отладки) - весь сгенерированный контент он должен вернуть (return).

Теперь, если вставить в текст записи такую строку: [link 42], то на странице вашего сайта вместо неё отобразиться ссылка на запись с ID = 42 (если она существует, иначе ничего не появится). Можно также передавать параметр по имени, что гораздо удобнее в более сложных шорткодах.

Передача параметров в шорткод используя именованные параметры


<?php

add_shortcode('link', function($attrs){
    if (empty($attrs['id'])) {
        return false;
    }

    $id = intval($attrs['id']);

    return $id ? get_permalink($id) : false;
});

Такая функция сделает работоспособной такую запись шорткода [link id="42"].

Передача контента внутрь шорткода

Также, можно внутри шорткода передать какое-то содержимое, которое не умещается в качестве параметра. Рассмотрим такой код:


<?php

add_shortcode('link', function($attrs, $content = ''){
    if (empty($attrs['id'])) {
        return false;
    }

    $id = intval($attrs['id']);

    if (!$id) {
        return false;
    }

    $linkUrl  = get_permalink($id);
    $linkText = $content ? : get_the_title($id);

    return '<a href="'.$linkUrl.'">'.$linkText.'</a>';
});

Для того, чтобы в переменную $content что-то передать, нужно использовать конструкцию, похожую на обычный HTML-тег: [link id="42"]Тычни меня![/link]. В данном примере, если мы используем конструкцию шорткода из первых двух вариантов, в переменную $content ничего не попадёт, и в текст ссылки подставится заголовок записи.

Теперь сами можете попробовать добавить шорткод на Wordpress сайт. Надеюсь, у вас всё получиться! 🙂 А если нет, то можете задавать вопросы в комментариях.

* весь приведённый код будет работать на PHP версии >=5.4