J'utilise un shortcode pour accordéon. Je voudrais mettre une boucle à l'intérieur de ce shortcode. Cependant, la balise de fermeture semble être non analysée.
<?php echo do_shortcode('[su_accordion]');?>
<?php
if ( have_posts() ) :
while ( have_posts() ) : the_post();
echo '<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">';
echo do_shortcode('[su_spoiler title="'.get_the_title().'" open="no" style="default" icon="plus" anchor="" class=""]'.get_the_content().'[/su_spoiler]');
echo '</div>';
endwhile;
else :
echo wpautop( 'Sorry, no posts were found' );
endif;
?>
<?php echo do_shortcode('[/su_accordion]');?>
La dernière partie du shortcode est affichée sous forme de texte simple.
Toute solution?
Recueillez toute la sortie de la boucle dans une variable, enroulez-la dans le shortcode accordéon, puis transmettez-la via do_shortcode:
$output = '';
if ( have_posts() ) :
while ( have_posts() ) : the_post();
$output .= '<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">';
$output .= do_shortcode('[su_spoiler title="'.get_the_title().'" open="no" style="default" icon="plus" anchor="" class=""]'.get_the_content().'[/su_spoiler]');
$output .= '</div>';
endwhile;
else :
$output = wpautop( 'Sorry, no posts were found' );
endif;
echo do_shortcode( '[su_accordion]' . $output . '[/su_accordion]' );
J'ai testé cela avec un couple de Shortcodes englobant et j'ai obtenu le résultat attendu.