[WordPress]投稿記事から引数ありのテンプレートを呼び出す
投稿IDを渡して記事情報を表示させたい
きっかけは記事を作っていくうちに特定の関連記事を表示させたいと思ったことです。
投稿IDを入力するだけでサムネイルやタイトルを表示、さらに記事へのリンクも貼れないものかと思い調査した結果、以下の機能を組み合わせることで実現できるようになりました。
ショートコードによる投稿記事からのテンプレート呼び出し
ショートコードとは、functions.phpに記述した関数を呼び出せるWordPressの機能です。関数名を [ ](角括弧、ブラケット)で囲み投稿画面に記述することで機能します。
今回は投稿IDをテンプレートへ渡したいので引数付きのショートコードをfunctions.phpに追加します。
functions.php
1 2 3 4 5 6 |
function add_link_by_post_id_func($atts) { ob_start(); // 出力処理をバッファに一時的に保存 get_template_part('template-parts/linkcard', null, $atts); return ob_get_clean(); // バッファを削除 } add_shortcode('add_link_by_post_id', 'add_link_by_post_id_func'); |
get_template_part()でテンプレートを呼び出します。
WordPress5.5以降からget_template_part()に引数を設定できるようになりました。渡された値(配列)をそのまま第3引数へと設定します。
※ショートコードから受け取った引数は配列となっています。
get_template_part
関数
get_template_part($slug, $name, $args)
テンプレートパーツを呼び出す
引数 | 説明 |
---|---|
$slug | テンプレートのファイル名を指定する。 |
$name | ファイルの名称を指定する。 【使い方】テンプレート用のファイルとして card.php と、card.php を一部変更したcard-wide.php があったとする。card-wide.php を使用したい場合にはget_template_part('card', 'wide'); と記載する。card-wide.php が存在しない場合はcard.php を読み込む。 |
$args | テンプレートへ渡す引数(配列)。 |
$name=null、$args=array()
第1引数:今回はテンプレートとしてtemplate-partsフォルダ内にlinkcard.phpファイルを用意したのでtemplate-parts/linkcardと記載します。
第2引数:今回は使用しないのでデフォルト値nullを設定しています。
投稿記事・ショートコード
1 |
[add_link_by_post_id id=投稿ID] |
functons.phpで作成した関数名と引数を記入します。引数には「属性名=属性値」を指定します。
テンプレートパーツへ投稿IDを渡し、該当記事を表示
1 2 3 4 5 6 7 8 9 10 |
<?php ['id' => $id] = $args; ?> <!-- サムネイル --> <?php echo get_the_post_thumbnail($id); ?> <!-- パーマリンク --> <?php echo get_permalink($id); ?> <!-- タイトル --> <?php echo get_post($id)->post_title; ?> |
get_template_part()で渡された引数は$argsに格納されています。
$args['id']
でも取得可能です。今回のような書き方は分割代入というそうです。
以下、引数を渡すにあたって参考にさせて頂いたサイト様です。
WordPressのget_template_part()に$argsで引数を渡す
投稿IDが分かれば、あとはそれをもとにサムネイルやタイトルを表示するだけです。
これで当初の目的の「投稿IDを入力するだけで投稿記事を表示」ができるようになりました。