【WordPress】複数、任意のフィールド取得、記事出力する方法(foreach回し/get_post_custom/記事内出力)
| 更新: 2024/02/10 | 2449文字
今回は、WordPressのサイト制作で使う『複数、任意のカスタムフィールドを取得、記事に出力』というのを取り上げます。フィールドに登録されている内容を、記事本文に手打ちするのは、フィールドが多くなってくると大変です。プログラムを使ってサクッと取得できるのが良いと思うので、さっそく方法を見ていってみましょう。
なお、いつものように管理人所有の著作権フリー曲サイトSSFを利用します(既にフィールドがいくつか指定されているからです)。
目次
『the_meta』がダメだった理由→表示に使わないフィールドも全部出る
以前も少し書きましたが、WordPressにはフィールド取得・出力ファンクションが用意されています。『the_meta』というのも、その一つ。『single.php』で使ってみましょうか。これはsingleやループ内で使えます。
こんな感じで、全部出てしまうんですね。リスト形式で出てくるのは便利ですけど、ファイルパスや、カウント数みたいな、表示に使わないフィールドも出ますので、他の方法を考えてみます。
テンプレートタグ/the meta
https://wpdocs.osdn.jp/テンプレートタグ/the_meta
WPカスタムフィールド~記事にthe_metaでフィールド出力&評価つける
/archives/5465/wp-custom-fields-the-meta-get-post-meta/
パターン1・get_post_customでまとめて取り、変数格納してecho
『複数、任意のカスタムフィールド』ということでしたが、この画像のように『get_post_meta』を何回も行うのは、フィールドが多いと大変かもしれません。さらに格納部分などもあります。なるべく行数を減らしてみましょう。
コード例と解説
取りたいフィールドは『atmos:雰囲気』『bpm:BPM』『sub_genre:曲のサブジャンル』『inst:メインで使っている楽器』です。まず、『get_post_custom』で一気に取って$multifieldに格納します。あとは$atmos = $multifield[atmos]のようにキー指定。
arrayなので、単純にechoするんじゃなく[0]のように、配列の番号をつけてやります(0が最初の要素。)。$atmos[0] . $atmos[1]のようにすると、複数入っているフィールドが出力できました(このフィールドはひとつのキーで二つの値が入っています。meta idは別です。)。
関数リファレンス/get post custom
https://wpdocs.osdn.jp/関数リファレンス/get_post_custom
表示例
『single.php』に記載。 改行とかを入れていないんで見にくいんですけど、複数・任意のフィールドを取ることができました。$atmos[0] . $atmos[1]のあいだの『.』が、文字列連結演算子なので、htmlタグを挟むこともできます(ただし、上記のコードはesc_htmlエスケープ処理しているので、タグがそのまま出ます。ご注意ください)。
パターン2・ get_post_metaをforeachでループ回す
コード例と解説
こちらは『get_post_meta』で一個ずつ取るんだけど、キー(’atmos’ , ‘bpm’ , ‘sub_genre’ , ‘inst’)を配列に入れて、foreachで回します。echoする部分もループ内に入れているので、コードがスマートな感じになります。
表示例
『single.php』に記載。 $atmos[0] . $atmos[1]みたいな指定ができなかったので、キーatmosは『最初の一個』が出力されています。スマートと言えばスマートですが、『キーが一個・値が複数』のときの処理は、今度考えてみたいと思います。
記事の本文で使いたい場合→ショートコードにする
上記の二つの例では『テンプレートsingle.php』に入れていました。状況によっては『最初の見出し前など、記事の内部で使いたい』時があるかもしれません。その場合は『ショートコード』を使用します。
表示テンプレートでなく、functions.phpに記載します。mmというのがショートコードです。そのほかの違いは『echoではなくreturnする』など。基本的にはパターン1と一緒です(タグを使う場合は、1と同様にesc_htmlエスケープ処理しているのでご注意ください)。
記事を書く時、フィールドを表示したい部分にショートコードを記載します。
記事内にフィールドを出力することができました。フィールド内容を補足する形で、本文を書くということもできるようになります。
あとがき・まとめ
- the_metaではフィールドが全部リストで出るので、任意のものを複数取るときはget_post_custom・get_post_meta
- foreachで回すと、コードが少なくて済む
- テンプレートではなく記事の本文で使いたい場合は、ショートコードにする
まとめると、このような感じでしょうか。特に『任意の複数のフィールド・記事本文内』というのは、サイトの傾向によっては使用頻度が高いと思いますので、ぜひご検討ください。
【カテゴリ】- WordPressファンクションetc
【タグ】- foreach(PHP), get_post_meta(wordpress), WordPress, カスタムフィールド