icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【WordPress】複数、任意のフィールド取得、記事出力する方法(foreach回し/get_post_custom/記事内出力)

更新: 2024/02/10 2449文字

【WordPress】複数、任意のフィールド取得、記事に出力する方法

今回は、WordPressのサイト制作で使う『複数、任意のカスタムフィールドを取得、記事に出力』というのを取り上げます。フィールドに登録されている内容を、記事本文に手打ちするのは、フィールドが多くなってくると大変です。プログラムを使ってサクッと取得できるのが良いと思うので、さっそく方法を見ていってみましょう。

なお、いつものように管理人所有の著作権フリー曲サイトSSFを利用します(既にフィールドがいくつか指定されているからです)。

『the_meta』がダメだった理由→表示に使わないフィールドも全部出る

以前も少し書きましたが、WordPressにはフィールド取得・出力ファンクションが用意されています。『the_meta』というのも、その一つ。『single.php』で使ってみましょうか。これはsingleやループ内で使えます。

こんな感じで、全部出てしまうんですね。リスト形式で出てくるのは便利ですけど、ファイルパスや、カウント数みたいな、表示に使わないフィールドも出ますので、他の方法を考えてみます。

パターン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は別です。)。

表示例

『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
【タグ】- , , ,

関連記事