Advanced Custom Fields(ACF)を使った場合の値の取得方法
WordPressには、カスタムフィールドにアクセスするためのpost_custom()やget_post_meta()といったネイティブ関数が用意されています。もちろんネイティブ関数を使ってもよいのですが、カスタムフィールドの実装をAdvanced Custom Fields(ACF)プラグインで行っている場合、ACFが提供するACF専用関数が便利です。
ここでは、フィールド値を取得するget_field()と、フィールド値を出力するthe_field()を紹介します。
get_field()
get_field()は指定したフィールドの値を取得します。この関数はテキストやチェックボックスといった全てのフィールドタイプで利用可能です。ACF関数の中でも、最もよく使われる関数だと思います。
get_field($selector, [$post_id], [$format]);
パラメータ
- $selector(必須): 取得したいフィールド名またはフィールドキーを指定します。
- $post_id:投稿IDを指定します。デフォルトは現在の投稿です。
- $format:取得した値にフォーマットを適用するかどうかを指定します。フォーマットはフィールドタイプ毎に決まっています(テキストエリアの場合はwpautop()やnl2br()などが適用)。デフォルトはtrueです。
返却値
指定されたフィールド値を返します。各フィールドタイプ毎に返却値のデータ形式(文字列、整数、配列など)が異なります。
現在の投稿から値を取得
次の例は、フィールド名field1の値を取得しています。
$value = get_field( "field1" );
さまざまなオブジェクトから値を取得
2番目の引数$post_idに投稿IDを指定することで、現在の投稿記事以外からも取得することができます。
次の例は、親ページの記事IDを取得して、親が保持するフィールド名field1の値を取得しています。
// 投稿のグローバル変数$postを使って、親ページの記事IDを取得
$parnet_id = $post->post_parent;
// 親ページのfield1の値を取得
$value = get_field( "field1", $parnet_id );
2番目の引数$post_idには投稿ID以外にも、カテゴリIDやタクソノミーIDなどを指定することができます。
// 投稿IDを指定
$post_id = 1;
// カテゴリの取得はタクソノミーのスラグ + _ + タームID
$post_id = "category_3";
// カスタムタクソノミーの取得はタクソノミーのスラグ + _ + タームID
$post_id = "event_4";
// ユーザの取得は user_ + ユーザID
$post_id = "user_2";
// 設定ページを指定
$post_id = "option";
上記の様に設定した引数を使ってget_field()を呼び出します。
$value = get_field( 'field1', $post_id );
フォーマットを無効にして値を取得
3番目の引数$formatにfalseを指定すると、フォーマット処理をキャンセルできます。
$obj = get_field ( "image_field", false, false );
3番目の引数を指定するには、2番目の引数も指定する必要があります。現在の投稿IDでよければ、2番目の引数にfalseを設定することができます。
get_fields()
get_fields()関数は、全てのフィールドの値(名前=>値)を取得します。
パラメーター
get_fields([$post_id], [$format]);
- $post_id:投稿IDを指定します。デフォルトは現在の投稿です。
- $format:取得した値にフォーマットを適用するかどうかを指定します。デフォルトはtrueです。
返却値
指定されたフィールド値を配列で返します。フィールドが見つからない場合はfalseです。
次の例では、foreachを使って全カスタムフィールドにアクセスしています。
// 全カスタムフィールドの名前と値を出力
$field = get_fields ();
if ( $field ) {
foreach ( $field as $name => $value ) {
echo $name . ":" . $value . "<br>";
}
}
the_field()
指定したフィールドの値を出力します。値を出力する以外はget_field()と同じです。
the_field($selector, [$post_id], [$format]);
現在の投稿から値を取得
the_field()は取得した値をそのまま出力します。次のコードはechoを使っていませんが、取得した値を出力します。
the_field( "field1" );