2018.06.25
WordPress
wordpressの投稿をトリガーにして別の投稿タイプの記事を呼び出した話
今回はwordpressのプラグインadvanced custam field
の投稿オブジェクトフィールドが便利だった!というお話です。
とあるwordpress案件を制作中に各地のチェーン店
とお客様の声
という2つの投稿タイプを作りました。
その際求められた仕様が、各地のチェーン店
に記事を投稿すると、お客様の声
内のカスタムフィールドに店舗を選択するフィールドが現れるというものでした。つまり投稿タイプAの記事をトリガーに投稿タイプBを分類できるようにしたい、Aに投稿するとBの選択肢が勝手に増える、を実現してほしいとのこと。
今回はその機能を実現した際に使った方法を紹介します。
投稿タイプをまたいでカスタムフィールドを連携させたい
当初クライアントから求められたのは、各地のチェーン店
内に、そのお店のお客様の声から3記事を掲載したいとのことでした。なのでお客様の声
にカテゴリーやタグでトリガーを設定しようとしましたが、それでは各地のチェーン店の記事を増やすたびにお客様の声のカテゴリーも増やす作業をせねばならず、クライアントが記事を更新するにあたって作業が煩雑になることがわかりました。
各地のチェーン店
に記事を投稿すると投稿した店舗名がお客様の声
に選択肢として表示されるようにしたい。これを実現するためにadvanced custam field
の投稿オブジェクトフィールドを利用しました。
投稿オブジェクトフィールドで記事を呼び出す
お客様の声
投稿タイプ内で、カスタムフィールド「投稿オブジェクト」の「投稿タイプで絞り込み」で投稿タイプ各地のチェーン店
を選びます。返り値のフォーマットを今回は投稿IDにします。するとお客様の声
の編集画面に下のようなプルダウンメニューが表示されます。
準備はこれで完了です。お客様の声
の編集画面で店舗名を選ぶと、その店舗の記事IDが紐付けられ、クライアントが記事を投稿することで勝手に選択肢が増えるフィールドができました。
投稿IDで投稿タイプの記事を呼び出す
各地のチェーン店
のテンプレートファイルに以下の記述をします。
<?php $postid = get_the_ID(); ?> <?php $args = array( 'posts_per_page' => 3, 'orderby' => 'menu_order', 'order' => 'ASC', 'post_type' => 'voice', 'post_status' => 'publish', 'meta_key' => 'voice_storename', //カスタムフィールドのキー 'meta_value' => $postid, //カスタムフィールドの値 ); $wp_query = new WP_Query($args); while ($wp_query->have_posts()) : $wp_query->the_post(); ?> <?php $voice_store = get_field('voice_store'); $store_page = get_post( $voice_store ); $store_tit = $store_page->post_title; ?> <p><?php echo $store_page ?></p> <?php endwhile; ?>
$args
の中のmeta_key
とmeta_value
がポイントです。カスタムフィールドのメタタグを絞り込み条件に加えられる記述ですが、値の呼び出しをget_the_ID()
その記事のIdにしています。
つまり「店舗の記事IDの情報を持ったお客様の声
の投稿から3件」を「同じ記事IDの投稿内に呼び出す」というコードになっています。
これでお客様の声
への投稿を各地のチェーン店
側で店舗別に呼び出すコードの完成です。
まとめ
2つの投稿タイプをまたいで関連づける少しややこしい動作でしたが、プランが決まってしまえばやりたいことは明白でした。advanced custam fieldにそれを実現できる機能があったおかげで、大変助かった、というお話でした。何かの際にお役に立てばと思います。