FAQページを作る時にカスタム投稿タイプ+カテゴリ分けで対応した時の覚書。
- カスタム投稿タイプ(faq)
- カスタム投稿タイプの中でさらにカテゴリ分け(ももについて、りんごについて)
- QuestionにはWPの投稿のタイトルを使用
- AnswerにはWPの投稿の本文を使用
例えば、faq(post_type)というカスタム投稿タイプがあって、更に「ももについて」「りんごについて」というカテゴリーを作り、記事を投稿していって、全カテゴリー(もも…、りんご…)をループ表示させたいときの覚書。
1)FAQ ←カスタム投稿タイプ(faq)
1-1)ももについて ←カテゴリ名
Q:ももはいつが食べごろですか? ←投稿のタイトル
A:夏です。 ←投稿の本文
(QAをくりかえす)
1-2)りんごについて ←カテゴリ名
Q:りんごはいつが食べごろですか? ←投稿のタイトル
A:冬です。 ←投稿の本文
(QAをくりかえす)
※この記事ではカスタム投稿タイプの設定の仕方は解説していません。
※カスタム投稿タイプの設定に’hierarchical’ => trueじゃないとだめ
以下がソース
<?php
// タクソノミ取得
$catargs = array(
'taxonomy' => 'faq_category'//(1)
);
$catlists = get_categories( $catargs );
foreach($catlists as $cat) : // 取得したカテゴリの配列でループを回す
?>
<div class="<?php echo $cat->slug; ?>">
<h1><?php echo $cat->name; ?></h1>
<?php
$args = array(
'posts_per_page' => -1,//(2)マイナス1は全件表示
'post_type' => 'faq',//(3)
'faq_category' => $cat->slug,//(4)
'orderby' => 'date',//(5)
'order' => 'DESC'//(6)降順 新しい日付から古い日付
);
$my_posts = get_posts( $args );
if ( $my_posts ) { // 該当する投稿があったら
foreach ( $my_posts as $post ) :
setup_postdata( $post );
?>
<div>
<h2>Q:<?php the_title(); ?></h2>
<p>A:<?php the_content(); ?></p>
</div>
<?php
endforeach;
} else {
echo 'このカテゴリに投稿はありません';
}
wp_reset_postdata();
?>
</div>
<?php endforeach; ?>
図中の(1)から(6)の解説
(1)’taxonomy’ => ‘faq_category’ の faq_category の部分は、 カスタム投稿タイプを設定する時にregister_taxonomy に振った名前を入力 。
(2)投稿の表示件数を入力 -1は全件表示という意味
(3)’post_type’ => ‘faq’ の faqの部分は、 カスタム投稿タイプを設定する時にregister_post_type に振った名前を入力。
(4)’faq_category’ => $cat->slug, の faq_categoryは(1)と同じものに設定。 $cat->slugというのはカテゴリをスラッグ(slug)ごとに取得してね という意味。
(5) ‘orderby’ => ‘date’, 日付順にならべる
(6) ‘order’=> ‘DESC’ 降順 新しい日付から古い日付順にならべる
カテゴリの表示順を変更したい場合
プラグインの「Category Order and Taxonomy Terms Order」で表示順を変更できます。
カテゴリーリスト
最近の投稿
Site Search
Profile
Web制作を生業にしています。主にHTML, CSS, JavaScript, PHP, WordPressのカスタマイズなどしてます。忘れっぽいので備忘録としてWebの小ネタを書いたり、人生のいろんなことを不定期にのんびり更新しています。小学生男児の母(シングルマザー)です。