ショートコードを使って【Advanced Custom Fields】で出力したページをほかのページにも使いたい!

本サイトはアフィリエイト広告を利用しています。

【Advanced Custom Fields】で設定した値をほかのページに出力して使う方法を書きたいと思います。

スポンサーリンク

はじめに

【Advanced Custom Fields】で設定した値をほかのページに出力して使いたいことがあると思います。
例えば、各店舗の店舗名と住所と電話番号を商品ページの下に表示したいとか。
これが1つなら、商品ページのphpに直書きすればよいと思います。
でも店舗が2つあり、商品によってA店舗を表示する、またはB店舗を表示したいとなった場合、なるべく簡単に呼び出して表示したいですよね。

今回紹介する方法以外にも方法はあるかもしれません。
別のやり方をしたい方は、検索をして他の人の記事など参考にしてください。

今回の方法は、店舗の出力の命令をそれぞれphpを用意して書いておく。それをショートコードで呼び出す。というものです。

カスタムフィールドの設定

下準備です。
まずはいったん下記のようなフィールドを作ります。

今回はカスタム投稿に「店舗情報」を作りました。

そこにフィールドを表示させ入力しておきます。

渋谷店情報です。

店舗の情報をphpにまとめる

店舗情報の中身を出力する命令を、新しく作ったphpに書きます。
ちなみに普通に店舗情報を出力する命令は、下記などを参考にしてください。

【Advanced Custom Fields】設定と出力、条件分岐、値を入れない時には非表示にしたい
【Advanced Custom Fields】の設定方法と出力、入力しなかったときに項目を非表示にする方法を書きたいと思います。 Advanced Custom Fieldsプラグインのインストール 管理画面の「プラグイン」→...

a-shop.phpなどというphpファイルを用意します。

設定したフィールド

フィールドラベル :店舗名
フィールド名:shop-name

フィールドラベル :住所
フィールド名:shop-address

フィールドラベル :電話番号
フィールド名:shop-tel

を出力する命令は下記です。a-shop.phpに書きます。

<?php if( get_field('shop-name' ,ページのID) ) { ?>
住所:<?php the_field('shop-name' ,ページのID); ?><br>
<?php } ?>
<?php if( get_field('shop-address' ,ページのID) ) { ?>
住所:<?php the_field('shop-address' ,ページのID); ?><br>
<?php } ?>
<?php if( get_field('shop-tel' ,ページのID) ) { ?>
電話番号:<?php the_field('shop-tel' ,ページのID); ?>
<?php } ?>

ページのIDは、カスタム投稿で入力したページのIDです。
店舗分用意します。
なぜ商品ページに直接命令を書き込めないかというと、ページIDが店舗ごとにそれぞれ違うからです。
ページIDは一覧を表示して、タイトルにマウスを置けば下に表示されます。

この場合は、「8」です。例として入力した店舗渋谷店は、IDが8です。渋谷店の情報を呼び出すには「8」とすれば、渋谷店の情報が出力できるというわけです。

なので、

<?php if( get_field('shop-name' ,8) ) { ?>
住所:<?php the_field('shop-name' ,8); ?><br>
<?php } ?>
<?php if( get_field('shop-address' ,8) ) { ?>
住所:<?php the_field('shop-address' ,8); ?><br>
<?php } ?>
<?php if( get_field('shop-tel' ,8) ) { ?>
電話番号:<?php the_field('shop-tel' ,8); ?>
<?php } ?>

となります。

ショートコードを作ります

投稿のページ内にphpは書けません。なので、a-shop.phpを作りました。このa-shop.phpを呼び出すのに、ショートコードを使います。

ショートコードについては下記でも紹介しました。

ウィジェットでphpを呼び出したい!ショートコードを設定してphpを読み込ませる方法!
ウィジェットでphpを使いたいと思って「テキスト」に入れても機能しません。なので、ショートコードを設定して、そこからphpを呼び出して使用する方法を書きたいと思います。 ウィジェットでphpファイルを呼び出したい ウィジ...

上記はウィジェットにショートコードを設定して、phpを呼び出すというものです。
これが応用できます。

functions.phpに下記の命令を書きます。

function Include_my_php($params = array()) {
    extract(shortcode_atts(array(
        'file' => 'default'
    ), $params));
    ob_start();
    include(STYLESHEETPATH . "/$file.php");
    return ob_get_clean();
}
 
add_shortcode('originalphp', 'Include_my_php');

これでa-shop.phpが呼び出せるようになりました。

投稿ページにショートコードを入れる

投稿ページで商品紹介のページを作るとしたら、その入力も【Advanced Custom Fields】で情報を入れられるようにする場合が多いと思います。
なので、【Advanced Custom Fields】でフィールドを作り、店舗情報のショートコードを入れられるフィールドも用意します。

いったんショップ情報というフィールドを用意します。

投稿ページにショートコードを入力します。

[originalphp file='a-shop']

投稿ページはsingle.phpです。フィールド名:shop-inを呼び出したいので、下記を入れます。

<?php if( get_field('shop-in') ) { ?>
<?php echo apply_filters('the_content', get_post_meta($post->ID, 'shop-in', true)); ?>
<?php } ?>

ちなみに【Advanced Custom Fields】でショートコードを呼び出すことができます。
下記で記事にしています。

【Advanced Custom Fields】のフィールドにContact Form 7のショートコードを入れたい!
【Advanced Custom Fields】でContact Form 7のショートコードを入れる方法を書きたいと思います。 はじめに そもそも【Advanced Custom Fields】でContact For...

ページを確認します。

店舗情報で渋谷店を入力しました。

これと情報が一緒です。
これで、渋谷店の情報を投稿ページにショートコードを使って入れることができました。

まとめ

もう一度簡単に説明すると、渋谷店、新宿店など必要な店舗ページを作ります。それぞれのIDを確認しておきます。
それぞれのIDを入れて、それぞれの店舗用のphpを作っておきます。
投稿ページで呼び出したい店舗のphp名を入れたショートコードを入力すれば、店舗の情報が表示されます。

店舗分のphpを作るのがめんどくさいというのがあると思いますが、でもよく考えてみてください。
店舗それぞれ、フィールドにそれぞれの住所などのテキストを入力するわけですよね。
じゃあそれをどうやって呼び出すのか?どの店舗に入力した住所を、別のページに呼び出して表示させるのか?
それを判断するのがIDというわけです。なのでそれぞれのページを認識させるIDが必要で、それぞれIDを入れたphpが必要になるわけです。
ちなみにIDではなくスラッグでもいけると思います。たぶん。

他にもやり方はあるとは思いますが、自分としては、いまのところこれが手っ取り早くて、わかりやすいかなと思っています。
少しでも参考になったら幸いです。

コメントをどうぞ