お問い合わせで、某有料テーマに切り替えたところショートコードが動かなくなってしまったという事例があったので解決法をご紹介します。
出力の関数が the_content になっているか確認する
今回の事例では、本文の出力部分がこのようになっていました。
<div class="entry-content">
<p>
<?php
if( ! is_single() )
echo get_home_blog_excerpt();
else
echo get_the_content();
?>
</p>
</div>
解決方法
注目ポイントは、get_the_content
で、ここを the_content
と修正すると解決します。
p タグの修正などもまとめて直した結果はこちらです
<div class="entry-content">
<?php
if( ! is_single() )
echo '<p>' .get_home_blog_excerpt() .'</p>';
else
the_content();
?>
</div>
原因
今回の元ソースにあるget_the_content
は、本文を echo せずに取得できるため、たとえばトップページの記事一覧で文字数を制限したい場合などに便利です。
ところが、ショートコードの変換などは、関数the_content
内にあるフィルターで変換されているのです。他にも、プラグインなどがフィルターを利用している場合がありますので、本文で使用する場合は必ずこちらの関数を使いましょう。
the_content
のソースはこちら。apply_filters( 'the_content', $content );
という部分でいろいろな変換がされています。
function the_content( $more_link_text = null, $strip_teaser = false) {
$content = get_the_content( $more_link_text, $strip_teaser );
/**
* Filters the post content.
*
* @since 0.71
*
* @param string $content Content of the current post.
*/
$content = apply_filters( 'the_content', $content );
$content = str_replace( ']]>', ']]>', $content );
echo $content;
}
テーマユニットテストで防止しよう
また、自分はテーマ作者だという方、クライアントワークで WordPress テーマを作っているという方は、こういったミスが起こらないように、事前にテーマテストユニットで確認することをオススメします!
the_content