カスタムフィールド

ACFのベーシック関数 get_field()/get_fields()/the_field()

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" );

関連記事