Шорткоды внутри шорткода - WordPress - PullRequest
17 голосов
/ 23 января 2011

Я создал шорткод для отображения сотрудников, HTML выглядит примерно так:

<ul class="employees">

<li><img src=""> <h5>name</h5> <p>description</p></li>
<li><img src=""> <h5>name</h5> <p>description</p></li>
..

</ul>

Итак, я создал 2 шорткода:

[start_employee] - который содержит <ul class="employee"> .. </ul>

[employee] - который содержит контент о сотруднике

И он должен работать так:

[start_employee]
[employee img=".." name=".." description=".."] 
[employee img=".." name=".." description=".."] 
[/start_employee]

, но когда я помещаю его в редактор WordPress, HTML выглядит такчто:

<ul class="employee">
[employee img=".." name=".." description=".."] 
[employee img=".." name=".." description=".."]
</ul>

Я думаю, я знаю почему .. потому что функция start_employee содержит:

return '<ul class="employee">'.$content.'</ul>';

Что мне делать, чтобы он читал его как шорткод?

Спасибо.

Ответы [ 3 ]

48 голосов
/ 23 января 2011

Шорткоды не вкладываются автоматически - вы должны позвонить do_shortcode($content) самостоятельно.См. caption_shortcode() пример на http://codex.wordpress.org/Shortcode_API.

11 голосов
/ 18 ноября 2011

Вы должны использовать шорткоды рекурсивно, чтобы получить результат.

function start_employee($attr,$content){
          return '<ul class="employee">'.do_shortcode($content).'</ul>';
}
add_shortcode("start_employee","start_employee");

function employee($attr,$content){
          return '<li><img src=""> <h5>name</h5>; <p>description</p></li>';
}
add_shortcode("employee","employee");
5 голосов
/ 07 мая 2013

Если у вас настроена рекурсивная функция, как в Cart66, вы можете сделать что-то вроде этого:

echo do_shortcode('[hide_from level="membership" ]<strong>You may only order this item if you are a member. Become a <a href="http://yoursite.com/beta/member-log-in/">member</a>.</strong>[/hide_from]');
echo do_shortcode('[show_to level="membership"]'.do_shortcode('[add_to_cart item="'.$prefix.get_post_meta($post->ID,'_et_cart66_product_id',true).'" ]').'[/show_to]');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...