ハロワ✋
先日業務で、固定ページで作成したフロントページに、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は何でもできますねえ。。。