Blog

【Advanced Custom Fields】別ページのカスタムフィールドの値を取得する方法

2021.05.17 2021.05.25 WordPress
【Advanced Custom Fields】別ページのカスタムフィールドの値を取得する方法

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();
?>
<div>

<?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に標準で作成されているもので、そこにフロントページに設定されている固定ページの情報も格納されています。

繰り返しフィールドの場合は、以下のようになります。

<?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を取得しておく方が管理しやすいはずです。