Современная, быстрая и удобная система управления сайтом

Шорткоды (shortcode)

Это короткие коды, похожие на bb-код и обрабатываются в тексте записи (или произвольном тексте).

Рассмотрим простой пример создания шорткода для вывода SPAN с произвольным css-классом. Шорткод будет вида:

[class t-red]text page[/class]
или
[class=t-red]text page[/class]

что в итоге преобразуется в

<span class="t-red">text page</span>

Отдельный файл шорткода

Удобней всего вынести код шорткода отдельно, например в custom/shortcode/sh.php и подключать в custom/my-template.php

<?php

if ($fn mso_fe('custom/shortcode/sh.php')) require_once $fn;
...

Регистрация шорткода

Обработку шорткода выполняет собственная произвольная функция, которую нужно зарегистрировать с помощью функции mso_shortcode_add() в файле шорткода.

<?php

mso_shortcode_add
('class''my_sh');

где class — и есть шорткод, а my_sh — функция обработчик.

Функция шорткода

Функция my_sh имеет единственный параметр, в котором будет массив атрибутов. В простом варианте использования массив содержит все атрибуты шорткода, включая текст.

<?php

function my_sh($attr)
{
    return  
'<span class="' $attr[1] . '">' $attr[2] . '</span>';
}
При создании шорткода желательно не использовать аналогичные варианты существующих BB-кодов.

Шорткод с множеством параметров

Шорткод может содержать множество параметров, например:

[lbox mini.jpg title="Титул" class="класс"]full.jpg[/lbox]

В этом случае функция должна самостоятельно выполнить парсинг атрибутов. Для этого можно воспользоваться вспомогательной функцией mso_shortcode_parse()

<?php

function my_lbox($attr)
{
    
$all mso_shortcode_parse($attr, array('class'=>'''title'=>''));
    
pr($all);
    
/*
    Array
    (
        [class] => класс
        [title] => Титул
        [content] => full.jpg
        [0] => mini.jpg
    )
    */    
    
...
}

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

Для того, чтобы обработать текст с использованием шорткода, используется функция mso_shortcode('шорткод', 'имя функции шорткода', 'текст').