Когда редактор добавляет WordPress [шорткод] к сообщению или странице, он заменяется возвращенным выводом функции-обработчика в плагине или файла functions.php темы. Давайте создадим простой пример:
// create a styled button function ContactButton($params, $content = null) { extract(shortcode_atts(array( 'url' => '/contact-us', 'type' => 'style1' ), $params)); return '<a href="' . $url . '" class="button ' . $type. '">' . ucwords($content) . '</a>'; } add_shortcode('button','ContactButton');
Когда на странице или в посте встречается следующий код:
[button]contact us today[/button]
это будет переведено на:
<a href="/contact-us" class="button style1">Contact Us Today</a>
Работа редактора стала намного проще, и им не нужно беспокоиться об изучении HTML. Давайте посмотрим на другой пример, который создает простое поле выноски:
// callout box function CalloutBox($params, $content = null) { extract(shortcode_atts(array( 'type' => 'style1' ), $params)); return '<aside class="callout ' . $type . '">' . $content . '</aside>'; } add_shortcode('callout','CalloutBox');
в// callout box function CalloutBox($params, $content = null) { extract(shortcode_atts(array( 'type' => 'style1' ), $params)); return '<aside class="callout ' . $type . '">' . $content . '</aside>'; } add_shortcode('callout','CalloutBox');
Но что, если наш редактор захочет вставить кнопку в поле выноски?…
[callout]For more information [button]contact us today[/button][/callout]
Как он есть, текущий код не удастся. Сначала вызывается функция CalloutBox, но внутренняя [кнопка] не будет соответственно переведена.
Ключевой функцией для решения проблемы является do_shortcode () — она применяет фильтр шорткодов WordPress к любому контенту. В этом случае мы хотим позволить редактору добавить [button] в наш [callout], чтобы мы изменили и изменили оператор return CalloutBox соответственно:
return '<aside class="callout ' . $type . '">' . do_shortcode($content) . '</aside>';
Вложенный код выше теперь будет работать как положено. Однако редактору не будет разрешено вложить [выноску] в [кнопку]. Такая гибкость делает WordPress радостью использования — теперь доступна версия 3.3 .