WordPressテンプレートにショートコードを入力するときの注意

WordPress個別サポート

WordPressでテンプレートの中にショートコードを入力したいこともあります。活用法はさまざまですが、たとえば、すべての記事の下にContact Form 7の問い合わせフォームを表示することもできるので非常に便利です。

すべての記事の下にContact Form 7の問い合わせフォームを表示
ショートコードを使って記事下にContact Form 7の問い合わせフォームを表示

「テンプレート ショートコード」でネット検索すると「do_shortcode」という命令が見つかるかもしれませんが、PHPに慣れていないと編集がうまくいかないこともあります。その仕組みを含めて使い方を簡単に紹介します。

テンプレートに入力したショートコードがそのまま表示される

すべての記事の下にお問い合わせフォームを表示したい場合、個別記事テンプレート(single.phpなど)のthe_contentの下あたりに、おなじみのContact Form 7のショートコードを入力することを思い付くかもしれません。

ところが、テンプレート内で次のようにショートコードを入力してもうまくいきません。

ショートコードをそのまま入力してもうまくいかない
ショートコードをそのまま入力してもうまくいかない

ショートコードがそのまま表示されてしまいます。

ショートコードがそのまま表示される
ショートコードがそのまま表示される

テンプレート内のショートコードにはdo_shortcodeを使う

テンプレートの中でショートコードを使いたい場合、do_shortcodeという命令を使います。次のようなイメージです。

<?php
echo do_shortcode('ここにショートコードを入力');
?>

1行にまとめても大丈夫です。

<?php echo do_shortcode('ここにショートコードを入力'); ?>

基本的にショートコードはシングルクォーテーションの' と ' の間に入力します。Contact Form 7のショートコードで使うイメージは次のようになります。

Contact Form 7のショートコードに適用
Contact Form 7のショートコードに適用

これで、お問い合わせフォームが表示されるようになります。

メールフォームが表示される
メールフォームが表示される

do_shortcodeの失敗例

このようにdo_shortcodeを使うとショートコードの内容を画面に表示できますが、PHPの文法を守らないとうまくいきません。以下、失敗例をいくつか紹介します。

do_shortcodeはPHPの開始・終了タグで囲むこと

do_shortcodeはPHPの命令なのでPHPの開始・終了タグで囲む必要があります。次のように裸で入力してもうまくいきません。

<?php the_content(); ?>
echo do_shortcode('ショートコード');

正しくはPHPの開始・終了タグで囲みます。

<?php the_content(); ?>
<?php
echo do_shortcode('ショートコード');
?>

ショートコードは半角の「'」で囲むこと

ショートコードは文字なので、do_shortcodeで呼び出すときはdo_shortcode('ショートコード')のように半角のシングルクォーテーション「'」で囲む必要があります。次の2つはいずれも間違いです。

echo do_shortcode(ショートコード);
echo do_shortcode(’ショートコード’);

1行目はショートコードを「'」で囲んでいません。2行目はショートコードを囲んでいるのは全角の「’」です。このサイトで何度も同じことを書いていますが、本当に紛らわしいので注意してください。シングルクォーテーション「'」は半角で入力です。

「'」で囲まないケースもありますが、話が長くなるので説明は省略します。

do_shortcodeはechoで出力すること

do_shortcodeで指定したショートコードを画面に表示するにはechoを使います。つまり、次のコードはうまくいきません。

<?php
do_shortcode('ショートコード');
?>
[php]

正しくは次のようになります。

[php title=""  gutter="0"]
<?php
echo do_shortcode('ショートコード');
?>

うまくいかないときは、入力したコードを入念にチェックしてみてください。「プラグインのバグ?」など、とんでもない方向に想像をふくらませるのは止めましょう。WordPressトラブルのほとんどの原因は単純な入力ミスです。