Статьи

Как создать вложенные шорткоды в WordPress

Когда редактор добавляет 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 .