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

※当ブログのリンクには一部広告が含まれています。

タイトルが分かりにくいですが、例えばある固定ページで店舗情報をカスタムフィールドで入力して、他のページでもそのカスタムフィールドの値を表示したい時などに使えます。

店舗情報が変更されれば、他のページでも変更されるという仕組みです。固定ページでも投稿ページでも使用可能です。今回はAdvanced custom fields(以下ACF)でカスタムフィールドを作成して出力させます。

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

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

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

上記のようなプラグインを使用せずにphpを実行するには、ショートコードを作成すると便利です。 ショートコードとは、functions.phpに書いたプログラム(関数)を短いコードで呼び出す機能です。

長いプログラムもたった1行で投稿画面からもテンプレートからも呼び出すことができます。もちろん、Advanced custom fieldsのカスタムフィールドの値も呼び出せます!

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

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

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

functions.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]'); ?>

ACFの関数を使う

投稿画面に書く場合

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

[acf field="shop_info" post_id="123"]

テンプレートに書く場合

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

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

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

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