ブログ初心者・Web制作の情報サイト
エディタ上でショートコードを使いテンプレートを出力する(WordPress)

エディタ上でショートコードを使いテンプレートを出力する(WordPress)

この記事ではWordPressのエディタ上でショートコードを使いテンプレートを呼び出す方法を紹介します。方法は functions.phpを使ったショートコードを登録です。

自分で作成したテンプレートをショートコードで利用したい時やテーマで使われている使用できそうなテンプレートを探して利用したい場合に役立ちます。特にトップページを固定ページで作成する場合にエディタ上でテンプレートを利用できるようになりカスタマイズがしやすくなります。

またコードの説明も加えているので気になる人は参考にしてください。

ショートコードを使いテンプレートを出力する

この記事はWordPressのテンプレートとショートコードの使い方を理解している前提で話をすすめます。もしショートコードの使い方を知らないという人は下記記事を参考にしてください。

【WordPress】ショートコードの書き方と注意点
この記事ではWordPressでWebページを作成する際に便利なショートコードの書き方とその注意点を紹介します。自分独自の機能を実装しエディタで使用できればWebページ作成がとても楽になりますよ。

ショートコードでテンプレートを出力するコード

WordPressのテンプレートを出力するショートコードです。functions.phpにコードを追加します。

//テンプレートを出力するショートコード
add_shortcode('shortcode_name', function($atts) {
   //引数を統合しextract()で変数に換える
   $atts = shortcode_atts(array(
      'file' => $atts[0],
   ), $atts);
   extract($atts);
   //バッファリング
   ob_start();
   get_template_part($file);
   return ob_get_clean();
});

add_shortcode()の第一引数である shortcode_name はショートコードを呼び出すための名前なので自由に付けてください。

使い方

エディタ上で以下のように記述して使用します。エディタ以外でもショートコードが利用できる場所であれば使用可能です。

[shortcode_name 出力するテンプレート]

「出力するテンプレート」は親テーマのテーマフォルダからのパスを記入します。.phpは必要ありません。

例えば 親テーマフォルダ/tmp/sample.php を出力する場合

[shortcode_name tmp/sample]

と書きます。これでショートコードを通してテンプレートの出力が可能になります。

コードの説明

//テンプレートを出力するショートコード
add_shortcode('shortcode_name', function($atts) {
   //引数を統合しextract()で変数に換える
   $atts = shortcode_atts(array(
      'file' => $atts[0],
   ), $atts);
   extract($atts);
   //バッファリング
   ob_start();
   get_template_part($file);
   return ob_get_clean();
});

add_shortcode()はショートコードを登録する関数です。この例では無名関数を使いそのまま登録しています。もし関数としても使用したい場合はadd_shortcode()と中のfunction()を分けてください。

4-7行目:引数を統合しextract()で変数に換える

4-7行目は引数を統合しextract()で変数に換えています。extract()は 配列からシンボルテーブルに変数をインポートするPHP関数で、ここでは「出力するテンプレートのパスが書かれたショートコードの第一引数」が「$file」に格納されます。

つまり extract()によって $fileが作られ get_template_part()に渡すことになります。

WordPressでは伝統的にextract()を使うようなので4-7行目はショートコード登録時の定型文だと思ってください。(array()の中身は変化します)

9-11行目:バッファリング

ob_start()はこのコードで非常に重要です。ob_start()によってバッファリングが有効になり一時的にget_template_part()の処理をバッファにためておきます。そして ob_get_clean()によってバッファのデータが取得された後に削除されます。

なぜこれが重要なのかというとHTMLとデータ取得を行う関数が混ざったファイル(多くのphpテンプレートがこの構造)をreturnで返してしまった場合、処理の順番が狂って期待したような結果にならないからです。ショートコードでは一度にデータを渡さなければいけません。

もし ob_start()を行わずに get_template_part()を returnすると「更新に失敗しました~」という下記のエラーが発生します。

更新に失敗しました。エラーメッセージ: 返答が正しい JSON レスポンスではありません。

どんな目的で使用するのか

ショートコードを使いテンプレートを出力できるようになりましたがこれはどんな目的で使用するのでしょうか?

実はとても便利な使い道があります。

ショートコードを使いテンプレートを出力することでWordPressテーマが持つテンプレートをすべてショートコードで利用できるようになります。しかもエディタ上で使えるのです。phpファイルを編集してテンプレートタグを打ち込む必要はありません。ショートコードなので投稿記事中の好きな場所にテンプレートを出力できます。

またテーマで使われている特定のこの表示がしたいと思ったことはないでしょうか?

  • 構造化データの付いたアイキャッチ画像出力機能をショートコードとして使いたい
  • テーマ固有の記事表示機能を固定ページで使いトップページを装飾したい
  • テーマで使われている特定の表現がしたいけど機能が提供されていない

これらは個別にテンプレートが作成されている場合が多いです。ショートコードでテンプレートを出力できれば実現できるようになります。もちろんテンプレート名を調べる必要がありますがショートコードでテンプレートを出力できるようになるとカスタマイズの幅が広がるでしょう。

使用できるテンプレートは構造的に独立しているものだけです。すべてのテンプレートがショートコードとしてそのまま利用できるわけではありません。そのあたりは自分でテンプレートのコードを確認する必要があるので注意してください。

テンプレートはどこにある?

テンプレートは親テーマの特定のフォルダにまとめられていることが多いです。tmpやtemplatesのような関連したフォルダ名が付いている場合が多いのでそれを参考にphpファイルを探してください。ソースコードからテンプレート名を探すのもいいでしょう。

最後に

エディタ上でショートコードを使いテンプレートを呼び出す方法を紹介しました。ショートコードでテンプレートを出力できるようになるとカスタマイズの幅が広がるので便利な使い方を探してみてください。