###前提・実現したいこと
WordPressの中でアーカイブを作っています。
アコーディオン形式で年をクリックするとスライドダウンして、その年の投稿のある月と件数が表示される仕様です。
また、その月をクリックするとアーカイブへのリンクとなってます。
元々投稿のカテゴリーが一つでしたので
archive.php、category-a.php、single-a.phpに下記コードを記載していました。
###該当のソースコード
php
1 <div id="archives_year"> 2 <ul class="menu_list"> 3 <li> 4 <?php 5$year_prev = null; 6$months = $wpdb->get_results("SELECT DISTINCT MONTH( post_date ) AS month , 7 YEAR( post_date ) AS year, 8 COUNT( id ) as post_count FROM $wpdb->posts 9 WHERE post_status = 'publish' and post_date <= now( ) 10 and post_type = 'post' 11 GROUP BY month , year 12 ORDER BY post_date DESC"); 13foreach($months as $month) : 14$year_current = $month->year; 15if ($year_current != $year_prev){ 16if ($year_prev != null){?> 17 </ul> 18 <?php } ?> 19<div class="main_menu"><span><?php echo $month->year; ?>年</span></div> 20<ul class="sub_menu"> 21 <?php } ?> 22 <li> 23 <a href="<?php bloginfo('url') ?>/date/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>"> 24 <?php echo date("n", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>月 25 (<?php echo $month->post_count; ?>) 26 </a> 27 </li> 28 <?php $year_prev = $year_current; 29 endforeach; ?> 30</ul> 31 32 </li> 33 </ul> 34 </div>
###発生している問題・エラーメッセージ
①追加で別のカテゴリーbを作ることになりました。
現在の記述ではカテゴリーaとb両方のアーカイブになっていますが、これを元のaのみにしたいです。
上記ソースのpost_typeの後に次のように書きましたがうまくいきませんでした。BDのテーブルが違うのかと考えてます。
php
1and post_type = 'post' and slug = 'a'
②それとは別にイベントというカスタム投稿を作りそちらのアーカイブも作成することになりました。
event organizerというプラグインを使用しています。
https://ja.wordpress.org/plugins/event-organiser/
内容は絞れたのですが、投稿日ではなくイベント日時でのアーカイブにしたいです。
こちらはpost_typeを次のように変更しました。
php
1and post_type = 'event'
SQLはそこまで知識がなくこちらのソースも数ヶ月前に調べながらどうにか作りました。
解決方法や別の作り方がありましたら、ご教授のほどよろしくお願いします。
###試したこと
下記ソースにしたところカテゴリーの絞りこみはできたのですが、記事数のカウントが増えてしまいました。
現在1記事のみしか公開していないのですが、4になってしまいます。
php
1 2$year_prev = null; 3$months = $wpdb->get_results("SELECT DISTINCT MONTH( post_date ) AS month , 4 YEAR( post_date ) AS year, 5 COUNT( id ) as post_count 6 FROM $wpdb->posts 7 LEFT JOIN $wpdb->postmeta 8 ON $wpdb->posts.ID = $wpdb->postmeta.post_id 9 LEFT JOIN $wpdb->term_relationships 10 ON $wpdb->posts.ID = $wpdb->term_relationships.object_id 11 LEFT JOIN $wpdb->term_taxonomy 12 ON $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id 13 LEFT JOIN $wpdb->terms 14 ON $wpdb->term_taxonomy.term_taxonomy_id = $wpdb->terms.term_id 15 WHERE post_status = 'publish' and post_date <= now( ) 16 and post_type = 'post' and slug = 'column' 17 GROUP BY month , year 18 ORDER BY post_date DESC"); 19
###問題②解決方法
下記のようにソースを変更して解決しました。
php
1$year_prev = null; 2$months = $wpdb->get_results("SELECT MONTH( StartDate ) AS month , 3 YEAR( StartDate ) AS year, 4 COUNT( DISTINCT id ) as post_count FROM $wpdb->posts 5 LEFT JOIN $wpdb->eo_events 6 ON $wpdb->posts.ID = $wpdb->eo_events.post_id 7 WHERE post_status = 'publish' and post_date <= now( ) 8 and post_type = 'event' 9 GROUP BY month , year 10 ORDER BY StartDate DESC");
回答2件
あなたの回答
tips
プレビュー