php - shortcodes - shortcode wordpress register
Códigos cortos dentro de un shortcode-wordpress (3)
Los do_shortcode($content)
no anidan automáticamente; usted debe llamar a do_shortcode($content)
usted mismo. Vea el ejemplo caption_shortcode()
en http://codex.wordpress.org/Shortcode_API .
Creé un shortcode que muestra a los empleados, el HTML parece algo así:
<ul class="employees">
<li><img src=""> <h5>name</h5> <p>description</p></li>
<li><img src=""> <h5>name</h5> <p>description</p></li>
..
</ul>
Así que creé 2 códigos cortos:
[start_employee] - que contiene <ul class="employee"> .. </ul>
[empleado] - que contiene contenido sobre el empleado
Y debería funcionar así:
[start_employee]
[employee img=".." name=".." description=".."]
[employee img=".." name=".." description=".."]
[/start_employee]
pero cuando lo pongo en el editor de wordpress el html se ve así:
<ul class="employee">
[employee img=".." name=".." description=".."]
[employee img=".." name=".." description=".."]
</ul>
Creo que sé por qué ... porque la función de start_employee contiene:
return ''<ul class="employee">''.$content.''</ul>'';
¿Qué debo hacer para leerlo como un código abreviado?
Gracias.
Tienes que usar códigos cortos recursivamente para obtener el resultado.
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");
Si tiene configurada una función recursiva, como en Cart66, puede hacer algo como esto:
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]'');