Advanced Custom Fieldsのカスタムフィールド入力値の出力や利用の方法
Advanced Custom Fieldsの設定画面は日本語にも対応していますし、UI自体がとてもわかりやすく出来ています。初心者の方が初めてインストールしても、割合スムースにカスタムフィールドの作成ができるのではないかと思います。
しかし!!フィールドを作って、そこに入力しただけはどこにも表示されませんし、表面上は何も変化が起きません。一生懸命カスタムフィールドを作成したけど、実際に入力値を利用できずに「なんなんじゃい!」と諦めてしまう方もいるのではないかと思います。
そこで、今回はAdvanced Custom Fieldsのカスタムフィールドに入力した値を実際に出力したり利用する方法について書いてみたいと思います。
※この記事の内容は、PHPの基本的な文法がわからないと、理解しにくい部分が含まれます。
~ 目次 ~
カスタムフィールドの入力値はメタデータ
カスタムフィールドに入力した値は、メタデータとして追加されます。メタデータというのは、表面上は見えませんがページにデータを添付してあるイメージです。添付しただけでは表示されませんよね。これを利用するには、ページで使用されているテンプレート内で値を取り出さなければいけません。
ワードプレスでメタデータを取得するには、get_post_meta() や get_post_custom() といった関数を使います。しかし、Advanced Custom Fieldsでは、値の取り出し用の関数が用意されていますので、今回はこちらを使用します。
フィールドの入力値の取得方法
Advanced Custom Fieldsのカスタムフィールドの値の取得は、以下の2つの関数を使います。
get_field()
指定した1つのカスタムフィールドの値を取得します。
1 |
get_field($selector, [$post_id], [$format_value]); |
取得して出力するコードの例
1 2 3 4 5 |
/* フィールド名「product_size」を取得 */ echo get_field('product_size'); /* 投稿ID4685の投稿のフィールド名「product_name」を取得 * echo get_field('product_name',4685); |
出力するだけ良い場合
単独のカスタムフィールドの値を、シンプルに出力するだけで良い場合は、the_field()という関数も用意されています。echo get_field()と同じ事をしてくれます。
という事で、下の2行は同じ結果になります。
1 2 |
echo get_field('color'); the_field('color'); |
get_fields()
すべてのカスタムフィールドを全てまとめて取得します。
1 |
get_fields([$post_id], [$format_value]); |
テンプレートの先頭で、下のように記述しておけば、好きな箇所ですべてのカスタムフィールドの値が利用できるようになります。
1 2 3 4 5 |
/* 現在の投稿のカスタムフィールドをすべて取得 */ $fieldData = get_fields(); /* 投稿IDが4687の投稿のカスタムフィールドを取得 */ $fieldData = get_fields(4687); |
いったん任意の名前の配列(上の例ではfieldData)に格納します。
そして利用する時は、下のように配列のキーにフィールド名を指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$fieldData = get_fields(); echo ' <dl> <dt>商品名</dt> <dd>'.$fieldData['product_name'].'</dd> <dt>カラー</dt> <dd>'.$fieldData['product_color'].'</dd> <dt>サイズ</dt> <dd>'.$fieldData['product_size'].'</dd> <dt>紹介文</dt> <dd>'.$fieldData['product_description'].'</dd> </dl> '; |
カスタムフィールドのタイプによっては、さらに中身が配列になっている場合もありますが、基本的にこんな感じで簡単に取り出せます。上は例としてDLを使用していますが、TABLEを使用すればカスタムフィールドの値を使用して自動的に生成される表を作る事もできますね。
最後に
取得して利用するのもとってもカンタンですね。
あまり使わないので本文中で省略してしまいましたが、get_field() も get_fields() も、最後のパラメータにfalseとすると、フォーマットしない状態の生データで取得できるようです。
文中にも書きましたが、フィールドタイプによって返り値が配列だったりする場合もあるので、イレギュラーのあるフィールドタイプについては別の機会にまとめたいと思います。
参考サイト
ACFの公式サイトの関数の一覧です。英語ですが気になる方はどうぞ。
https://www.advancedcustomfields.com/resources/#functions