WordPress

【WordPress】カスタムフィールドの値を他のページに出力させる方法

ハロワ✋

先日業務で、固定ページで作成したフロントページに、SNSリンク用のカスタムフィールドをAdvanced Custom Fieldsプラグインを利用して設置しました。

他のページ、というか全てのページにそのカスタムフィールドの値を出力したかったのですが、普通にカスタムフィールドの値を引っ張ってきてもフロントページにしか反映されません😅

今回はカスタムフィールドの値を他のページに出力する方法について解説します。

【結論】第2引数にページIDを指定する

フロントページのカスタムフィールドの値を出力させたい

<?php
// フロントページのIDを取得
$front_page_id = get_option('page_on_front');

// 第2引数にフロントページのIDを格納した変数を指定
the_field('FIELD_NAME', $front_page_id);

get_option()optionsデータベーステーブルから名前を指定してオプションの値を取得する関数です。

引数にpage_on_frontを指定するとフロントページのIDを取得することができます。

その取得したIDを変数に格納し、the_field()関数の第2引数に指定することで他のページにもその値を出力させることができます。

複数ページでこのIDを使うようであれば、フロントページのIDを返す関数をfunctions.phpで定義して使い回すと便利です。

<?php
// フロントページのIDが返ってくる
function front_page_id() {
  $front_page_id = get_option('page_on_front');
  return $front_page_id;
}
<?php the_field('FIELD_NAME', front_page_id()); ?>

固定ページや投稿ページのカスタムフィールドの値を出力させたい

スラッグ名からIDを取得し、そのIDをthe_field()関数の第2引数に指定します。

固定ページの場合

<?php
$page = get_page_by_path('SLUG_NAME’);
$page_id = $page->ID;
the_field('FIELD_NAME', $page_id);

get_page_by_path()関数は引数に渡されたパスで示される固定ページのオブジェクトを返します。
つまり、その固定ページに関する色々な情報が返ってきます。

その第1引数にはページのスラッグ名を指定します。

親子関係があるものは以下のようにスラッシュ区切りで!

<?php
$page = get_page_by_path('about/member');
$page_id = $page->ID;

投稿ページ

<?php
$page = get_page_by_path('SLUG_NAME', 'OBJECT', 'post');
$page_id = $page->ID;

投稿ページも固定ページと一緒でget_page_by_path()関数を利用します。

異なる点は投稿オブジェクトを示すOBJECTを第2引数に、投稿ページを示すpostを第3引数に指定するところです。

カスタム投稿タイプの場合はそのスラッグ名を第3引数に指定してください。

おわりに

業務でこのようなことをやる機会があったので共有いたしました🤘

WordPressは何でもできますねえ。。。