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の教科書
プライム・ストラテジー株式会社
ソフトバンククリエイティブ
売り上げランキング: 5,208
WordPressプロフェッショナル養成読本 [Webサイト運用の現場で役立つ知識が満載! ] (Software Design plus)
高野直子 後藤賢司 染谷昌利 岡本雄樹 深海寛信 岡本 渉 松本悦宜
技術評論社
売り上げランキング: 24,886
いちばんやさしい WordPress の教本 人気講師が教える本格Webサイトの作り方
石川栄和 大串肇 星野邦敏
インプレスジャパン
売り上げランキング: 2,127