
知り合いに頼まれまして、久しぶりによそ様のWordPressをいじることになりました!
僕、自分のサイトでWP使ってし大好きなんですけど、
PHPを理解してゴリゴリ触れるほどのエキスパートじゃないんですよね…。
だから、毎回何かやろうとするたびに「うぐっ…」って苦戦する羽目に。
今回のラスボス:カテゴリ記事数の「かず」を知りたい!
で、今回一番「うぐっ!」ってなったのが、カテゴリに紐づいた記事件数を引っ張ってくる作業でした。
なんでこんなことで苦労するんや
多分、またこの件で未来の僕が泣くと思うので、「忘れるなよ!」メモとしてここに残しておくことにします。….〆(・ω・。)
で設定したPHPはこれ!
<?php
$parent_category_ids = array(読み込みたいカテゴリの番号をここに書く); // カテゴリIDの配列
foreach ($parent_category_ids as $parent_cat_id) {
$parent_cat = get_category($parent_cat_id);
$child_categories = get_categories(array(
'parent' => $parent_cat_id,
'hide_empty' => false
));
$child_ids = wp_list_pluck($child_categories, 'term_id');
$query = new WP_Query(array(
'category__in' => $child_ids,
'posts_per_page' => -1,
'fields' => 'ids'
));
$count = $query->post_count;
// 空白防止のために <div> に変更
echo '<div class="category-count">' . esc_html($parent_cat->name) . '<br>(' . $count . '種類)</div>';
wp_reset_postdata();
}
?>
親カテゴリの罠!「全記事読むなや!」
で、これで「解決やで!」って思うやん。
でも、動かしてみたら、子カテゴリの記事数はちゃんとカウントしてくれるのに、親カテゴリの記事だけ見ようとすると、なぜかサイトの全記事を読んでしまうという問題が発覚…!
「いやいや、親しかいない場合その親カテゴリだけ見てくれたらええんやで!」
これわかる人がみたら当たり前やんってなるんやろうね、、
結局、僕の腕じゃどうにもならず、AIさんの力とか、インターネットの賢人たちの知恵を借りまくって、コードを直す。
できたのがこちら。
<?php
// 親カテゴリIDの配列
$parent_category_ids = array(読み込みたいカテゴリの番号をここに書く);
// WP_Queryで親カテゴリに直接紐づく記事のみを取得
$query = new WP_Query(array(
'posts_per_page' => -1, // すべての記事を取得
'category__in' => $parent_category_ids,
));
// 記事数を取得
$count = $query->post_count;
// 親カテゴリの名前を取得
$parent_cat = get_category($parent_category_ids[0]);
// 結果の表示
echo '<div class="category-count">' . esc_html($parent_cat->name) . '<br>(' . $count . '種類)</div>';
// 投稿データの初期化
wp_reset_postdata();
?>
これでなんとか親カテゴリだけでも記事数をちゃんと所得できて一安心。
余談
最近WordPressのお知り合いと久しぶりに喋って、僕の知らないWPの使い方も増えているようで
今度、WordPressのイベントがあったら参加したい。