サポート » 使い方全般 » 特定カテゴリの月別アーカイブを表示したいです

  • 
    <?php
    $year_prev = null;
    $months = $wpdb->get_results(	"SELECT DISTINCT MONTH( post_date ) AS month ,
    								YEAR( post_date ) AS year,
    								COUNT( id ) as post_count FROM $wpdb->posts
    								WHERE post_status = 'publish' and post_date <= now( )
    								and post_type = 'post'
    								GROUP BY month , year
    								ORDER BY post_date DESC");
    foreach($months as $month) :
    	$year_current = $month->year;
    	if ($year_current != $year_prev){
    		if ($year_prev != null){?>
    		</ul>
    		<?php } ?>
    	<h3><?php echo $month->year; ?></h3>
    	<ul class="archive-list">
    	<?php } ?>
    	<li>
            <a href="<?php bloginfo('url') ?>/date/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>">			<span class="archive-month"><?php echo date("n月", mktime(0, 0, 0, $month->month, 1, $month->year)) ?></span>		</a>
    	</li>
    <?php $year_prev = $year_current;
    endforeach; ?>
    </ul>
    

    このコードで

    2016 10月
    2015 12月 11月

    などのリストを表示させることはできましたが、
    リンク先がすべてのカテゴリの月別アーカイブになってしまっており、
    特定のカテゴリのみの表示にしたい場合どうしたらよろしいでしょうか。

    ご教授くださいませ。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • すみません、私もまったく同じ内容でずっと困っております。。

    下記のサイトに解決しそうな記述がありますが、特定カテゴリの月別アーカイブを表示するという解決になっていない気がします。
    https://teratail.com/questions/55664

    ↓このような記述ではだめなようです。
    「and post_type = ‘post’ and slug = ‘column’」

    どなたかご教授のほど、よろしくお願いいたします。

    http://kitaney-wordpress.blogspot.jp/2016/12/wordpress.html

    に作ってみましたので参考にして試してみてはどうかと思います。
    なお
    <a href="<?php bloginfo('url') ?>/date/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>"> <span class="archive-month"><?php echo date("n月", mktime(0, 0, 0, $month->month, 1, $month->year)) ?></span>

    の部分については手持ちでは

    <a href="<?php bloginfo('url') ?>/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>"> <span class="archive-month"><?php echo date("n月", mktime(0, 0, 0, $month->month, 1, $month->year)) ?></span>

    に修正しています。 /date/ を / ですね。ここは設定がそれぞれ違うと思いますので、適当に加味して修正してください。

    コードも貼っておきますね。こちらのほうがコードのコピーが容易だと思いますので

    <?php // カテゴリーなし(slug名)のみの月別アーカイブ表示
    
    $year_prev = null;
    $slug = 'カテゴリーなし';
    
    // 日本語のエンコード処理
    $slug = urlencode($slug);
    // エンコードした場合、%が入る。SQLでは %は %% とエスケープが必要
    if(preg_match("/%/", $slug)):
      $slug = str_replace('%','%%', $slug);
    endif;
    
    $query = $wpdb->prepare("SELECT DISTINCT MONTH( post_date ) AS month ,
    								YEAR( post_date ) AS year,
    								COUNT( id ) as post_count FROM $wpdb->posts 
    								WHERE post_status = 'publish' and post_date <= now( )
    								and post_type = 'post'
    								and id IN(
    									SELECT object_id FROM wp_term_relationships
    									WHERE term_taxonomy_id = (
    										SELECT term_taxonomy_id FROM wp_term_taxonomy AS tt
    										INNER JOIN wp_terms AS tm ON tt.term_id = tm.term_id
    										WHERE tm.slug = '%s'
    									) 
    								)
    								GROUP BY month , year
    								ORDER BY post_date DESC",$slug);
    
    $months = $wpdb->get_results($query);
    
    foreach($months as $month) :
    	$year_current = $month->year;
    	if ($year_current != $year_prev){
    		if ($year_prev != null){?>
    		</ul>
    		<?php } ?>
    	<h3><?php echo $month->year; ?></h3>
    	<ul class="archive-list">
    	<?php } ?>
    	<li>
            <a href="<?php bloginfo('url') ?>/date/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>">			<span class="archive-month"><?php echo date("n月", mktime(0, 0, 0, $month->month, 1, $month->year)) ?></span>		</a>
    	</li>
    <?php $year_prev = $year_current;
    endforeach; ?>
    </ul>

    <a href="<?php bloginfo('url') ?>/date/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>"><span class="archive-month"><?php echo date("n月", mktime(0, 0, 0, $month->month, 1, $month->year)) ?></span></a>
    この部分にカテゴリーの絞り込みのクエリー文字列がいるんじゃないでしょうか。
    検索結果は日別とカテゴリーで絞り込まれていますが、リンク先ではどうなんでしょう。
    その月に該当するカテゴリーしかなければ問題ないと思いますが、
    仮に、2015年の10月に希望のカテゴリーと別のカテゴリがあれば、リンク先では両方のカテゴリーを表示することにならないんでしょうか。
    標準ならsite_url/?year=2015&monthnum=10&cat=11というURLが出力できれば、
    スレ主の希望どおりになるんでしょうか。
    追伸
    date/year/monthはカスタムパーマリンクになるんですかね。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「特定カテゴリの月別アーカイブを表示したいです」には新たに返信することはできません。