Advanced Custom Fields(ACF)値の取得

スポンサーリンク

get_field()

指定したフィールドの値を取得する。
テキストやチェックボックスといった全てのフィールドタイプで利用可能。

get_field($select_name, [$post_id], [$format]);

$select_name(必須): フィールド名またはフィールドキー
$post_id:投稿ID。デフォルトは現在の投稿。
$format:取得した値にフォーマットを適用するかどうかを指定。フォーマットはフィールドタイプ毎(テキストエリアの場合はwpautop()やnl2br()などが適用)。デフォルトはtrueです。
返り値:指定されたフィールド値。各フィールドタイプ毎に返り値のデータ形式(文字列、整数、配列など)が異なります。

現在の投稿から値を取得

$val1 = get_field( "field_name1" );

各オブジェクトから値を取得

2つ目の引数$post_idに投稿IDを指定すると、現在の投稿記事以外からも取得できる。

親ページの記事IDを取得して、親が保持するフィールド名field1の値を取得しています。

// 親ページの記事IDを取得
$parnet_id = $post->post_parent;
// 親ページのfield_name1の値を取得
$val1 = get_field( "field_name1", $parnet_id );

2つ目の引数$post_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";


$val1 = get_field( 'field_name1', $post_id );

フォーマットを無効にして値を取得

3つ目の引数$formatにfalseを指定すると、フォーマット処理をキャンセルできます。

$obj = get_field ( "image_field", false, false );


※3つ目の引数を指定するには、2つ目の引数も指定する必要がある。現在の投稿IDでよければ、2つ目の引数にfalseを設定。

get_fields()

全てのフィールドの値を取得。

get_fields([$post_id], [$format]);


$post_id:投稿IDを指定する。(デフォルト:現在の投稿)
$format:取得した値にフォーマットを適用するかどうかを指定する。(デフォルト:true)
返り値:指定されたフィールド値を配列で返す。フィールドが見つからない場合はfalse。

foreachを使ったアクセス

// すべての各カスタムフィールドの名前と値を出力
$fields = get_fields ();
if ( $fields ) {
    foreach ( $fields as $name => $val ) {
        echo $name . ":" . $val . "
"; } }

the_field()

指定したフィールドの値を出力する

the_field($select_name, [$post_id], [$format]);

現在の投稿から値を取得

取得した値をそのまま出力する。

the_field( "field1" );

get_field_object()

get_field_object($select_name, [$post_id = false], [$format = true], [$load = true]);

$select_name(必須):フィールド名またはフィールドキーを指定。
$post_id:投稿IDを指定。(デフォルト:現在の投稿)
$format:フォーマットを適用するかどうか。(true or false)
$load:フィールドの値をロードするかどうか。(true or false)
返り値:下のような配列。

array(
    'ID'                => 0,
    'key'               => '',
    'label'             => '',
    'name'              => '',
    'prefix'            => '',
    'type'              => 'text',
    'value'             => null,
    'menu_order'        => 0,
    'instructions'      => '',
    'required'          => 0,
    'id'                => '',
    'class'             => '',
    'conditional_logic' => 0,
    'parent'            => 0,
    'wrapper'           => array(
        'width'             => '',
        'class'             => '',
        'id'                => ''
    )
);

フィールドのラベルと値を表示

get_field_object()は連想配列を返すので、キーを指定して値を取得する。

$field_name = get_field_object( "field_name" );
// ラベルを表示
echo $field["label"];
// 値を表示
echo $field["value"];

get_field_objects()

指定した投稿のすべてのフィールド情報(ラベルやフィールドタイプ)を返す。

get_field_objects( [$post_id = false], [$format = true], [$load = true] );

$post_id:値が保存された投稿IDを指定。デフォルトは現在の投稿。
$format:フォーマットを適用するかどうか。(true or false)
$load:フィールドの値をロードするかどうか。(true or false)
返り値:下のような配列を返す。

array(
    "field_name" => array(
        'ID'                => 0,
        'key'               => '',
        'label'             => '',
        'name'              => '',
        'prefix'            => '',
        'type'              => 'text',
        'value'             => null,
        'menu_order'        => 0,
        'instructions'      => '',
        'required'          => 0,
        'id'                => '',
        'class'             => '',
        'conditional_logic' => 0,
        'parent'            => 0,
        'wrapper'           => array(
            'width'             => '',
            'class'             => '',
            'id'                => ''
        )
    ),
    ...
);

すべてのフィールドのラベルと値を表示

get_field_objects()を使って、すべてのフィールドのラベルと値を表示する。

$fields = get_field_objects();
foreach( $fields as $field ){
    echo $field['label'] . " : " . $field['value'];
}

フィールドタイプ毎の取得・表示

テキストフィールド

the_field('text'); 

//if 構文の時に代入演算子を使う場合
$text = get_field('text'); 
if( $text ):
  echo $text;
endif;

画像フィールド

返り値:オブジェクトの場合

<?php $image = get_field('image'); if( !empty($image) ): ?>
<img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>" />
<?php endif; ?>

//画像の URL やタイトルなどを個別に取り出す場合
<?php
  $image = get_field('image');
  if( !empty($image) ):
  // 画像から各種値を取り出す
  $url = $image['url']; // URL
  $title = $image['title']; // タイトル
  $alt = $image['alt']; // 代替テキスト
  $caption = $image['caption']; // キャプション
  $description = $image['description']; // 説明
  // thumbnail
  $size = 'thumbnail'; // 画像サイズ thumbnail(サムネイル), medium(中サイズ), large(大サイズ), full(元画像)
  $thumb = $image['sizes'][ $size ]; // 指定したサイズのサムネイルのURL
  $width = $image['sizes'][ $size . '-width' ]; // 横幅
  $height = $image['sizes'][ $size . '-height' ]; // 高さ
?>
<a href="<?php echo $url; ?>" title="<?php echo $title; ?>">
  <img src="<?php echo $thumb; ?>" alt="<?php echo $alt; ?>" width="<?php echo $width; ?>" height="<?php echo $height; ?>" />
</a>
<p>
<?php echo $caption; ?>
<?php echo $description; ?>
</p>
<?php endif; ?>


返り値:URLの場合

<?php if( get_field('image') ): ?>
<img src="<?php the_field('image'); ?>" />
<?php endif; ?>


返り値:IDの場合

<?php
  $image = get_field('image');
  $size = 'full'; // (thumbnail, medium, large, full or custom size)
  if( $image ) {
    echo wp_get_attachment_image( $image, $size );
  }
?>

チェックボックス・ラジオボタンフィールド

<?php the_field('colors'); ?>

//値が複数の場合
<?php
  $colors = get_field('colors'); // 値の代入
  if( $colors ){
    echo implode(', ', $colors); // 配列要素を文字列「, 」で連結して表示
  }
?>

//サンプル
<?php $field = get_field('colors'); if ($field): ?>
<ul>
<?php foreach( $field as $value ): ?>
  <li>
<?php echo $value; ?>
  </li>
<?php endforeach; ?>
</ul>
<?php endif; ?>


条件付きで表示する場合

<?php
  $colors = get_field('colors');
  if( $colors && in_array('red', $colors)){
    echo '赤があるかどうか判別しました。赤があります。';
  }else{
    echo '赤があるかどうか判別しました。赤はありません。';
  }
?>


ラジオボタンフィールドでラベルを取得して表示する方法

//フィールド名が colors 登録している値とラベルが red:赤 の場合にラベル赤を表示。
<?php
  $field = get_field_object('colors');
  $value = $field['value'];
  $label = $field['choices'][ $value ]; // ラベルを取得
  echo $label; // ラベルを表示
?>


チェックボックスフィールドでラベルを取得して表示する方法

//フィールド名が colors 登録している値が red:赤 の場合にラベル(赤)を表示
<?php
  $field = get_field_object('colors');
  $colors = $field['value'];
  if( $colors ){
    foreach( $colors as $color ){
      echo $field['choices'][ $color ];
    }
  }
?>

日付(デイトピッカー)

//そのまま表示
<?php the_field('date'); ?>

//カスタマイズして表示
<?php
  $date = get_field('date', false, false); //値の取得
  $date = new DateTime($date); //日付オブジェクトの作成
  echo $date->format('j M Y'); //日付の表示
?>

ファイルフィールド

<?php // ファイル名のテキストリンクを表示
  $file = get_field('file');
  if($file){
    echo '<a href="'.$file['url'].'">'.$file['filename'].'</a>';
  }
?>

//ファイルの名前やファイルの絶対パスを取得する
<?php // ファイルの表示
  $file = get_field('file'); // フィールド名を指定
  if($file){
    echo $file['id']; // ファイルの ID を表示
    echo $file['title']; // ファイルのタイトルを表示
    echo $file['filename']; // 拡張子を含むファイル名を表示
    echo $file['url']; // ファイルの URL を表示
    echo $file['alt']; // ファイルの alt を表示
    echo $file['author']; // ファイルの管理者IDを表示
    echo $file['description']; // ファイルのディスクリプションを表示
    echo $file['caption']; // ファイルのキャプションを表示
    echo $file['name']; // 拡張子を除いたファイル名を表示
    echo $file['date']; // ファイルの登録日を表示 20XX-08-08 08:08:08
    echo $file['modified']; // ファイルの最終更新日を表示 20XX-08-08 08:08:08
    echo $file['mime_type']; // MIME タイプ、PDFであれば application/pdf を返します
    echo $file['type']; // ファイルタイプ、PDFであれば application を返します
    echo $file['icon']; // WordPress 共通のファイルアイコンのパス
  }
?>

コメント

タイトルとURLをコピーしました