Advanced Custom Fieldsで設置したカスタムフィールドの値を取得するには、以下のように書きます。
<?php the_field('フィールド名'); ?>
繰り返しフィールドの場合は以下のような感じです。
<?php
if( have_rows('フィールド名') ):
while ( have_rows('フィールド名') ) : the_row();
?>
<?php the_sub_field('サブフィールド名'); ?>
<?php
endwhile;
else:
endif;
?>
しかしこれらの書き方だと、カスタムフィールドを設置したページでしか値を取得することができません。
ということで今回は、別のページからカスタムフィールドの値を取得する方法についてご紹介していきます。
別ページのカスタムフィールドの値を取得する方法
とはいえ別ページのカスタムフィールドを取得するのは簡単で、基本は上記のような書き方で、フィールド名のあとに取得したいカスタムフィールドが設置されているページのIDを指定するだけです。
<?php the_field('フィールド名', ページID); ?>
たとえばIDが「211」の固定ページにあるカスタムフィールド「shop_data」の値を取得したい場合は、以下のようになります。
<?php the_field('shop_data', 211); ?>
ページIDは”で囲む必要はありません。
繰り返しフィールドなら以下のような形になります。
<?php
if( have_rows('フィールド名', ページID) ):
while ( have_rows('フィールド名', ページID) ) : the_row();
?>
<?php the_sub_field('サブフィールド名'); ?>
<?php
endwhile;
else:
endif;
?>
別ページのスラッグを使ってカスタムフィールドの値を取得する方法
上記のようにページIDを指定することでカスタムフィールドの値を取得できるわけですが、やはりページスラッグを使えた方が感覚的に分かりやすいです。
その場合はget_page_by_path関数を使って、ページスラッグからIDを取得し、そのIDを上記のコードに入れるような流れでカスタムフィールドの値を取得します。
<?php
$page_id = get_page_by_path('ページスラッグ');
$page_id = $page_id->ID; //ページIDを取得して$page_idに代入
?>
<?php the_field('フィールド名', $page_id); ?>
ページスラッグが「term」のページから「privacy」というフィールド名のカスタムフィールドの値を取得する場合は、以下のようになります。
<?php
$page_id = get_page_by_path('term');
$page_id = $page_id->ID;
?>
<?php the_field('privacy', $page_id); ?>
繰り返しフィールドの場合はこうです。
<?php
$page_id = get_page_by_path('ページスラッグ');
$page_id = $page_id->ID;
?>
<?php
if( have_rows('フィールド名', $page_id) ):
while ( have_rows('フィールド名', $page_id) ) : the_row();
?>
<?php the_sub_field('サブフィールド名'); ?>
<?php
endwhile;
else:
endif;
?>
フロントページのカスタムフィールドの値を取得する方法
これまでご紹介したようにページIDを取得すれば別ページのカスタムフィールドを取得できるわけですが、フロントページ(に設定した固定ページ)の場合は、上記の方法でページIDを取得することができません。
その場合はget_option関数を使って、オプションデータベーステーブル(wp_options)からフロントページとして設定されている固定ページのIDを取得します。
<?php
$front_page_id = get_option('page_on_front');
the_field('フィールド名', $front_page_id);
?>
オプションデータベーステーブルはWordPressに標準で作成されているもので、そこにフロントページに設定されている固定ページの情報も格納されています。
- 参考URL
- オプション設定リファレンス
繰り返しフィールドの場合は、以下のようになります。
<?php
$front_page_id = get_option('page_on_front');
if( have_rows('フィールド名', $front_page_id) ):
while ( have_rows('フィールド名', $front_page_id) ) : the_row();
?>
<?php the_sub_field('サブフィールド名'); ?>
<?php
endwhile;
else:
endif;
?>
WordPress表示設定「投稿ページ」のカスタムフィールドの値を取得する方法
投稿ページ(「表示設定」→「ホームページの表示」で「投稿ページ」に設定した固定ページ)の場合も同様に、get_option関数を使ってページIDを取得します。
<?php
$home_page_id = get_option('page_for_posts');
the_field('フィールド名', $home_page_id);
?>
繰り返しフィールドの場合は、以下のようにします。
<?php
$home_page_id = get_option('page_for_posts');
if( have_rows('フィールド名', $home_page_id) ):
while ( have_rows('フィールド名', $home_page_id) ) : the_row();
?>
<?php the_sub_field('サブフィールド名'); ?>
<?php
endwhile;
else:
endif;
?>
まとめ
以上、Advanced Custom Fieldsで設置した別ページのカスタムフィールドの値を取得する方法でした。
ちょっと分かりづらく書いてしまったような気がしますが、基本的にはページIDさえ指定すればフロントページだろうが投稿ページだろうがカスタムフィールドの値を取得することはできます。
しかしスラッグからページIDを取得して…… という場合、フロントページや投稿ページにはスラッグがないため、get_option関数を使う必要が出てきます。
フロントページや投稿ページに設定する固定ページを変更することがないという場合には、ページIDを直接指定してしまえば簡単です。
しかし将来的に変更の可能性がある場合には、get_option関数を使ってIDを取得しておく方が管理しやすいはずです。