[WordPress]投稿記事から引数ありのテンプレートを呼び出す

投稿IDを渡して記事情報を表示させたい

きっかけは記事を作っていくうちに特定の関連記事を表示させたいと思ったことです。
投稿IDを入力するだけでサムネイルやタイトルを表示、さらに記事へのリンクも貼れないものかと思い調査した結果、以下の機能を組み合わせることで実現できるようになりました。

ショートコードによる投稿記事からのテンプレート呼び出し

ショートコードとは、functions.phpに記述した関数を呼び出せるWordPressの機能です。関数名を [ ](角括弧、ブラケット)で囲み投稿画面に記述することで機能します。

今回は投稿IDをテンプレートへ渡したいので引数付きのショートコードをfunctions.phpに追加します。

functions.php

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を設定しています。

投稿記事・ショートコード

functons.phpで作成した関数名と引数を記入します。引数には「属性名=属性値」を指定します。

テンプレートパーツへ投稿IDを渡し、該当記事を表示

get_template_part()で渡された引数は$argsに格納されています。

$args['id']でも取得可能です。今回のような書き方は分割代入というそうです。

以下、引数を渡すにあたって参考にさせて頂いたサイト様です。
WordPressのget_template_part()に$argsで引数を渡す

投稿IDが分かれば、あとはそれをもとにサムネイルやタイトルを表示するだけです。
これで当初の目的の「投稿IDを入力するだけで投稿記事を表示」ができるようになりました。