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

 2017.08.08  2017.09.28

タイトルが分かりにくいですが(汗)、例えばある固定ページで店舗情報をカスタムフィールドで入力して、他のページでもそのカスタムフィールドの値を表示したい時などに使えます。店舗情報が変更されれば、他のページでも変更されるという仕組みです。固定ページでも投稿ページでも使用可能です。今回は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に以下の文を記述します。作業前には必ずバックアップをとっておきましょう。

function get_shop_info() {
     $myshop = get_field('shop_info' ,123);
     return $myshop;
}
add_shortcode('show_shop_info', 'get_shop_info');

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

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

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

[show_shop_info]

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

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

<?php echo do_shortcode('[show_shop_info]'); ?>

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

<?php the_field('shop_info' ,123); ?>