WordPress 3.4までの月次アーカイブリストには、投稿ページのように、次の投稿、前の投稿などのリンクを付けるための関数は、準備されていません。
月次アーカイブを開くと、個別記事を選択するか、戻るという事になり、月次アーカイブというレベルでの、画面遷移はできません。
http://ja.forums.wordpress.org/topic/11300?replies=4(何かよい方法がないかと、質問がありました)
コードは、その時書いたものに少し手を入れたものです。
theme/functions.php
if( ! function_exists( 'raindrops_monthly_archive_prev_next_navigation' ) ){ function raindrops_monthly_archive_prev_next_navigation(){ global $wpdb, $wp_query; $post_date = ''; $thisyear = ''; $thismonth = ''; $filter_name= __FUNCTION__; $class_name = str_replace( '_', '-', $filter_name ); if( is_month() ){ if ( have_posts() ) { $post_date = $wp_query->posts[0]->post_date; $thisyear = mysql2date('Y', $post_date ); $thismonth = mysql2date('m', $post_date ); }else{ return; } $unixmonth = mktime(0, 0 , 0, $thismonth, 1, $thisyear); $last_day = date('t', $unixmonth); $previous = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year FROM $wpdb->posts WHERE post_date < '$thisyear-$thismonth-01' AND post_type= 'post' AND post_status= 'publish' ORDER BY post_date DESC LIMIT 1"); $next = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year FROM $wpdb->posts WHERE post_date > '$thisyear-$thismonth-{$last_day} 23:59:59' AND post_type= 'post' AND post_status= 'publish' ORDER BY post_date ASC LIMIT 1"); $html = '<a href="%1$s" class="%3$s">%2$s</a>'; if ( $previous ) { $calendar_output= sprintf( $html, get_month_link($previous->year, $previous->month) , sprintf(__('Previous Month(%sth)','Raindrops'), $previous->month), 'alignleft' ); } $calendar_output .= "\t" ; if ( $next ) { $calendar_output .= sprintf( $html, get_month_link($next->year, $next->month), sprintf(__('Next Month(%sth)','Raindrops'), $next->month), 'alignright' ); } $html = '<div class="%1$s">%2$s</div>'; $calendar_output= sprintf( $html, $class_name, $calendar_output ); echo apply_filters( $filter_name, $calendar_output ); } } }
template file ( ex:archive.php,date.php )
<?php if( function_exists( 'raindrops_monthly_archive_prev_next_navigation' ) ){ raindrops_monthly_archive_prev_next_navigation(); } ?>
他の方法
get_calendar() の返り値を盗んで、リンクだけを抜き出す。
少し遊んでいます。
<?php if( is_month() ){ preg_match('!<tfoot>(.*)<\/tfoot>!siu',get_calendar(true, false), $regs ); if( ! empty( $regs ) ){ $response= strip_tags( $regs[1], '<a>'); echo apply_filters( 'my_codenap', $response ); }elseif( WP_DEBUG ){ echo 'HTML of the calendar maybe changed. '; } } ?>
テンプレートにapply_filtersを記述したので、
functions.phpから、
add_filter( 'my_codenap', 'my_filter' ); function my_filter($contents){ return '教えない'; }
といったコントロールが利くようになります。