【Advanced Custom Fields】で設定した値をほかのページに出力して使う方法を書きたいと思います。
はじめに
【Advanced Custom Fields】で設定した値をほかのページに出力して使いたいことがあると思います。
例えば、各店舗の店舗名と住所と電話番号を商品ページの下に表示したいとか。
これが1つなら、商品ページのphpに直書きすればよいと思います。
でも店舗が2つあり、商品によってA店舗を表示する、またはB店舗を表示したいとなった場合、なるべく簡単に呼び出して表示したいですよね。
今回紹介する方法以外にも方法はあるかもしれません。
別のやり方をしたい方は、検索をして他の人の記事など参考にしてください。
今回の方法は、店舗の出力の命令をそれぞれphpを用意して書いておく。それをショートコードで呼び出す。というものです。
カスタムフィールドの設定
下準備です。
まずはいったん下記のようなフィールドを作ります。
今回はカスタム投稿に「店舗情報」を作りました。
そこにフィールドを表示させ入力しておきます。
渋谷店情報です。
店舗の情報をphpにまとめる
店舗情報の中身を出力する命令を、新しく作ったphpに書きます。
ちなみに普通に店舗情報を出力する命令は、下記などを参考にしてください。
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を呼び出すというものです。
これが応用できます。
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】でショートコードを呼び出すことができます。
下記で記事にしています。
ページを確認します。
店舗情報で渋谷店を入力しました。
これと情報が一緒です。
これで、渋谷店の情報を投稿ページにショートコードを使って入れることができました。
まとめ
もう一度簡単に説明すると、渋谷店、新宿店など必要な店舗ページを作ります。それぞれのIDを確認しておきます。
それぞれのIDを入れて、それぞれの店舗用のphpを作っておきます。
投稿ページで呼び出したい店舗のphp名を入れたショートコードを入力すれば、店舗の情報が表示されます。
店舗分のphpを作るのがめんどくさいというのがあると思いますが、でもよく考えてみてください。
店舗それぞれ、フィールドにそれぞれの住所などのテキストを入力するわけですよね。
じゃあそれをどうやって呼び出すのか?どの店舗に入力した住所を、別のページに呼び出して表示させるのか?
それを判断するのがIDというわけです。なのでそれぞれのページを認識させるIDが必要で、それぞれIDを入れたphpが必要になるわけです。
ちなみにIDではなくスラッグでもいけると思います。たぶん。
他にもやり方はあるとは思いますが、自分としては、いまのところこれが手っ取り早くて、わかりやすいかなと思っています。
少しでも参考になったら幸いです。
コメントをどうぞ