WordPressのショートコードで任意のテンプレートを呼び出す

Pocket

WordPressで投稿の任意の場所にお問い合わせフォームなんかを仕込みたいなー、なんて言われたことはありますでしょうか。でも投稿の中の話なので、テンプレートをいじってどうこうできる話じゃありませんよね。では、どうするか。

ショートコードでテンプレートを呼び出す

ショートコードを使えば、投稿内の任意の場所でPHPのコードを呼び出すことができます。

shortcode

そんな訳でベタにショートコードの関数内に、表示したいHTMLを書いても良いのですが・・・

見た目、ちょっとつらいですよね。こういうときはテンプレートを使いたい。

WordPressにはget_template_part()という関数があり、これを使うと任意の場所でテンプレートを呼び出すことができます。

しかしこのコードのままでは、実際に投稿の中で使おうとすると投稿の一番上に問い合わせフォームが表示されてしまいます。どうやらget_template_part()の内部では最終的にrequire_once()を使ってテンプレートがロードされるようであり、そのせいで投稿の中身が表示されるより先にテンプレートのレンダリングが走ってしまう模様。

ではどうするのかというと、レンダリングのバッファを文字列として取得しておいて、取得した文字列をshortcodeの置換内容として返してあげれば良いようです。PHPにはそんな関数が用意されているのがナイスですね。

これで任意の場所にテンプレートの内容を表示することができます。コードもスッキリしてナイスですね。

そういうわけで地味にWordPressのノウハウが溜まっていくのでした。。