2013/5/16

WordPressで二つのカスタム投稿タイプを二重ループ

またちょっと難解なことがあって、できるかなあと思ってたんですが、できました。ええと、何でも良いんですけど、カスタム投稿タイプで論文と、それをまとめたジャーナル、という2つの投稿タイプを持つとします。という時に。

<?php
$parm = array(
'post_type' => 'journal',
'showposts' => -1
);
$my_query = new WP_Query($parm); ?>
<?php if($my_query->have_posts()): ?>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
<div class="news_each clearfix">
<span class="news_title">
  <strong><?php the_title(); ?></strong>
</span>
<?php $jid = get_post_meta($post->ID,'ジャーナルID',TRUE);?>
<?php
$parm = array(
'post_type' => 'report',
'showposts' => -1,
'meta_key' => '収録ジャーナルID',
'meta_value' => $jid,
);
$sub_query = new WP_Query($parm); ?>
<?php if($sub_query->have_posts()): ?>
<?php while ($sub_query->have_posts()) : $sub_query->the_post(); ?>
<span class="news_title">
<?php the_title(); ?>
</span>
<?php endwhile; ?>
</div>
<?php endif; ?>

<?php endwhile; ?>

<?php endif; ?>

というようにカスタム投稿タイプのループを入れ子にしてやって、カスタムフィールドの変数を子ループに承継してあげると、親子関係のカスタム投稿タイプを親子関係のループにできますね。

意外とこういうのWordPressではやってなくて(そもそも他のCMSのデータベースから持って来たデータを流用しないといけないかったからという理由もあるが)、こういうやり方もあるんだなあと学びました。これも案件によっては応用可能性ありそうですね。

ひとり仕事: フリーランスという働き方
(2012-10-5)
売り上げランキング: 14,705
100円
WordPressデザインレシピ集
狩野 祐東
技術評論社
売り上げランキング: 197,569
WordPress 高速化&スマート運用必携ガイド
こもりまさあき 岡本渉
エムディエヌコーポレーション
売り上げランキング: 435,263