私はアコーディオンにショートコードを使っています。このショートコードの中にループを入れたいです。しかし終了タグは未解析のようです。
<?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]');?>
ショートコードの最後の部分は単純なテキストとして表示されます。
何か解決策はありますか?
ループの出力をすべて変数にまとめ、アコーディオンのショートコードでラップしてから、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]' );
私はこれをいくつかのショートコードでテストし、期待通りの出力を得ました。