【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
(順不同)