特定のページで入力されたAdvanced custom fieldsの値をショートコードで出力する方法

 2017.08.08  2017.11.02

タイトルが分かりにくいですが(汗)、例えばある固定ページで店舗情報をカスタムフィールドで入力して、他のページでもそのカスタムフィールドの値を表示したい時などに使えます。店舗情報が変更されれば、他のページでも変更されるという仕組みです。固定ページでも投稿ページでも使用可能です。今回はAdvanced custom fieldsでカスタムフィールドを作成して出力させます。

WordPressのプラグイン「Advanced custom fields」を使ってカスタムフィールドの値をテンプレートで出力する場合、 通常はthe_field()get_field()といったプラグインのタグを使用することが多いと思いますが、管理画面の投稿ページで出力したい場合は、どうすればよいでしょうか?

管理画面の投稿画面ではphpが実行できないようになっているので、<?php the_field('field_name'); ?>と記述しても反映されません。「Exec-PHP」のような投稿画面でもphpを使えるようにするためのプラグインが出ていますが、セキュリティー的に不安要素が多いので、できれば使用を避けたいところです。

Exec-PHPの代わりにショートコードを使う

上記のようなプラグインを使用せずにphpを実行するには、ショートコードを作成すると便利です。 ショートコードとは、function.phpに書いたプログラム(関数)を短いコードで呼び出す機能です。
長いプログラムもたった1行で投稿画面からもテンプレートからも呼び出すことができます。もちろん、Advanced custom fieldsのカスタムフィールドの値も呼び出せます!

今回は「ページA」で入力したカスタムフィールド「shop_info」の値を、投稿画面とテンプレートで呼び出します。
予めAdvanced custom fieldsで「shop_info」を設定している前提で話を進めます。

ショートコードの基本的な書き方は、以下のページでも説明しています。

function.phpにカスタムフィールドを呼び出す関数を書く

function.phpに以下の文を記述します。作業前には必ずバックアップをとっておきましょう。

関数「get_shop_info」を作成し、「ページA」で入力したカスタムフィールド「shop_info」の中身を変数「$myshop」に代入して、returnで表示します。
「123」というのは「ページA」のページIDで、管理画面のURLで調べることができます。 「add_shortcode」で、ショートコード名「show_shop_info」と作成した関数「get_shop_info」を併記してショートコード[show_shop_info]で呼び出せる状態にします。

投稿画面でカスタムフィールドの値を呼び出す

投稿画面では以下のショートコードを記述します。

テンプレートでカスタムフィールドの値を呼び出す

テンプレートでは以下のように記述します。

ACFの関数を使う

投稿画面に書く場合

ACF独自のショートコードも用意されていますが、the_fieldで出力できるようなテキストベースのシンプルな値のみ有効のようです。

テンプレートに書く場合

もちろん以下のようにAdvanced custom fieldsの関数を使っても表示されます。この場合は、ショートコード名ではなくてカスタムフィールド名とページIDを記述することをお忘れなく!混乱しないようにルールを決めておくといいですね。

ACFを更に使いやすくするACF Pro

ACF Proは、次世代バージョンのACFとACFを更にパワーアップさせた高機能なアドオン(The Repeater Field、The Gallery Field、The Flexible Content Field、Clone field、Options Pages)がパッケージ化された有料プラグインです。便利な機能が多く搭載されているのでオススメです!

参考記事Advanced Custom Fieldsを更に使いやすく!ACF Proを選ぶ理由と機能紹介