2020.5.16

カスタムフィールドをTOPなど全てのページで取得する - WordPress

カスタムフィールドは通常、設定した任意のページでのみ、値を取得して使うことが出来ます。
ですが、TOPページ(index.php)でも使いたい場合もあるかと思います。
今回は、カスタムフィールドの値をTOPページ(index.php)など全てのページで使う方法を紹介します。

はじめに

前提として、カスタムフィールドを登録するのは「Advanced Custom Fields」を使用します。

事前の設定

1. 固定ページを作成

名前などは何でも良いので、固定ページを管理画面上から作成します。

この固定ページはあくまでサイト全体でカスタムフィールドの値を取得するために存在するページです。

注意点
作成した固定ページはサイト上に表示させたくないので、リダイレクトやno-index, no-fllowなど適時設定してください。

2. カスタムフィールドを設定する

「Advanced Custom Fields」の管理画面を開き、位置の「このフィールドグループを表示する条件」の設定を変更します。

「ルールを追加」のボタンをクリックして、先程作った固定ページでカスタムフィールドを使えるようにします。

下記画像の場合、2行目の「ページ」「等しい」「custom-field」を設定することで、固定ページ(ページ名:custom-field)でカスタムフィールドを使えるようにしています。

設定はこれで完了です。

次に、カスタムフィールドの呼び出し方法を説明します。

 

カスタムフィールドの呼び出し方

カスタムフィールドを取得するには、get_field('フィールド名)get_field_object('フィールド名')などがあります。
上記の方法だと管理画面でカスタムフィールドを設定しているページでしか使えません。
例えば、TOPページ(index.php)でget_field_object('フィールド名')を実行しても値は取得出来ません。
(以後説明ではget_field_object()を使用しますが、今回紹介する方法でget_field()なども同様に使えます)

第2引数にページIDを渡す

get_field_object('フィールド名')を実行する時に、第2引数にページIDを設定すれば、TOPページなど他のページでもカスタムフィールドを使うことが出来ます。

get_field_object('フィールド名', 'ページID')

この仕組を利用して、全てのページでカスタムフィールドを使うことが出来ます。

固定ページのIDを取得する

固定ページのページIDを取得するには、get_page_by_path('固定ページのスラッグ')を使います。

固定ページのURLが/custom-field/ならget_page_by_path('custom-field')のようにして実行すると、固定ページの情報オブジェクトを取得出来ます。

その中にページIDがあります。

なので最終的に、下記のようにすると固定ページのIDを取得出来ます。

$page = get_page_by_path('固定ページのスラッグ');
$id = $page->ID // これが固定ページのページID;

結論

下記コードで、全てのページでカスタムフィールドを使うことが出来ます。

$page = get_page_by_path('固定ページのスラッグ');
$id = $page->ID;
$get_field = get_field_object('フィールド名', $id);

まとめ

get_field_object()の第2引数にページIDを設定すれば、任意のページでカスタムフィールドを呼び出すことが出来ると先程説明しました。

ですが、わざわざ固定ページを作成しなくても、既に存在する投稿のページIDを設定しても同様に任意のページでカスタムフィールドを呼び出すことが出来ます。

しかし、あえて固定ページを作成して…という方法にしたかというと、もし投稿ページのIDを利用した場合、下記のような懸念点があるからです。

  • 投稿が削除される可能性がある
  • 環境(ローカルや本番)が変わったら投稿IDが変わる可能性がある

もし上記のようなことが起きたらエラーになります。

WordPressでサイト制作を行う場合、上記のように投稿記事の削除や更新、環境の違いなど様々なことを想定して作るようにしましょう。

 

シェアする
フォローする
Web-Guided - web業界で働く方を少しだけ手助けするメディア