【WordPress】ショートコードで外部PHPファイルを読み込む

ショートコードを使って、コールバック関数で定義したPHPを実行できたのが前回です。

これで満足してたのですが、データの一覧表示も必要だと思い。

じゃあテンプレートファイルの編集・・・とも思ったのですが。

表示したいのは1つの固定ページのさらに1部分で、全体のデザインを変える気がなかったので。

専用のPHPファイルを作成し、ショートコードで読み込めないかなと。

ちょっと試してみることに。

テンプレートファイルの読み込みのget_template_part()

最初に調べて見て見つかったのは、ワードプレス関数のget_template_part()を使った方法。

確かにテンプレートファイルの読み込みで使用しているので、外部ファイルの読み込みにも利用できるんだなぁと。

Luxeritas開発者のるなさんが投稿している内容なので、掲載してくださっているコード中盤のadd_shortcode()以降を調整すれば良いかなと思いましたが。

get_template_part()の読み込みはrequireで行われるそうで。

閲覧者の少ない時間帯でのアップロードを考えているとはいえ、何かしらの間違いがあってfatal errorを吐き出されたらやだなぁと。

・・・メンテナンス時間を別で作れという話なんですがw

ショートコードのコールバック関数の引数を利用する

ということで、このようなコードで実装することに。

add_shortcode( 'test_list',function( $args, $contents ){
  extract( shortcode_atts( array(
      'file' => 'test-list.php',
      ), $args ) );

  ob_start();
  include( get_stylesheet_directory() . '/ディレクトリ名/' . $file );
  return ob_get_clean();
  return $contents;
}, 99);

ショートコードを追加するadd_shortcode()のコールバック関数には、$attsという連想配列が用意されています。

連想配列にextract()を使用し配列の属性を変数として扱うことで、ショートコードで指定した値をショートコードの関数に渡していたということなんですねー。

今回はそこに外部PHPファイル名を指定し、$fileという変数を扱える用にしています。

そして、ob_start()ob_get_clean()の間で、一時的な処理として相対パスで指定した場所のファイルをincludeで読み込んでいます。

これで無事ショートコード[test-list]を使用して、外部ファイルを読み込むことができました。

テンプレートファイル作成以外でも

これもブロックエディタになったからでしょうか。

なんとなく、投稿の編集中の必要な箇所に挿入できた方が良いなぁと思い。

テンプレートファイルではなく、ショートコードでの読み込みを試した次第です。

ブロックエディタ自体、ページを作りながら編集しているようなものですし。

用意したコードと、記事作成作業が連動しているような感覚で楽しいですね。

試しにショートコードで呼び出す外部ファイル内にサブループも作ってみましたが、しっかりと動いてくれているので。

予想以上の効果かもしれません。

参考:【WordPress】ACFから出力される値をthe_content内に含めて出力する方法‐SAKURAGRAPHICA

参考: WordPress ショートコードの作成‐Web Design Leaves

(順不同)