WordPressで年度別アーカイブを作成
WordPressで年度別アーカイブを作成 光陽マーリンズのサイトを、MovableTypeからWordPressへ移行したのですが、記事を年度別に表示するにあたり、MovableTypeのようにMTタグで簡単に作れないのでプラグインを探したが見つからず。 ということで、ネットであれこれ調べてカスタマイズしてみた備忘録です。
まずは年度別アーカイブを作成
次のリンクを参考に、functions.phpに次のコードを追加。
function query_for_fiscal_year( $where ) {
global $wpdb, $wp_query, $fiscal_year;
if ( is_year() ) {
$fiscal_year = (int)$wp_query->query_vars['year'];
$next_year = $fiscal_year + 1;
$where = "
AND ( ( YEAR($wpdb->posts.post_date) = '$fiscal_year' AND MONTH($wpdb->posts.post_date) BETWEEN '4' AND '12' )
OR ( YEAR($wpdb->posts.post_date) = '$next_year' AND MONTH($wpdb->posts.post_date) BETWEEN '1' AND '3') )
AND $wpdb->posts.post_type = 'post'
AND ($wpdb->posts.post_status = 'publish' OR $wpdb->posts.post_status = 'private')";
}
return $where;
}
add_action( 'posts_where', 'query_for_fiscal_year' );
次に年度別アーカイブリストを出力させるコード
次のリンクを参考に、functions.phpに次のコードを追加。
function my_get_archives_by_fiscal_year ( $args = '' ) {
global $wpdb, $wp_locale;
$defaults = array (
'post_type' => 'post',
'limit' => '',
'format' => 'html',
'before' => '',
'after' => '',
'show_post_count' => false,
'echo' => 1
);
$r = wp_parse_args( $args, $defaults );
extract ( $r, EXTR_SKIP );
if ( '' != $limit ) {
$limit = absint( $limit );
$limit = ' LIMIT ' . $limit;
}
$output = '';
$arcresults = (array) $wpdb->get_results(
"SELECT YEAR(ADDDATE(post_date, INTERVAL -3 MONTH)) AS `year`, COUNT(ID) AS `posts`
FROM $wpdb->posts
WHERE post_type = '$post_type' AND post_status = 'publish'
GROUP BY YEAR(ADDDATE(post_date, INTERVAL -3 MONTH))
ORDER BY post_date DESC
$limit"
);
if ( $arcresults ) {
$afterafter = $after;
foreach ( $arcresults as $arcresult ) {
$url = get_year_link( $arcresult->year );
$text = $arcresult->year . '年度';
if ( $show_post_count )
$after = ' (' . $arcresult->posts . ')' . $afterafter;
$output .= get_archives_link( $url, $text, $format, $before, $after );
}
}
if ( $echo )
echo $output;
else
return $output;
}
ウイジットの作成
次のリンクを参考に、ウイジットを追加。
(1)fiscal-year.phpを作成
WordPress のテキストウィジェットで PHP コードを書けるようにするプラグインとしては、「PHP Code Widget」などがありますが、セキュリティの懸念があり、他の方法を探したところ次の方法が見つかりました。
まず、fiscal-year.phpを作成し、次のコードを記述してテーマフォルダにアップロード。
<ul>
<?php my_get_archives_by_fiscal_year();?>
</ul>
(2)functions.phpに次のコードを追加
add_filter( 'widget_text', function( $ret ) {
$php_file = 'fiscal-year';
if( strpos( $ret, '[' . $php_file . ']' ) !== false ) {
add_shortcode( $php_file, function() use ( $php_file ) {
get_template_part( $php_file );
});
ob_start();
do_shortcode( '[' . $php_file . ']' );
$ret = ob_get_clean();
}
return $ret;
}, 99 );
(3)テキストウィジェットに前述のショートコード [fiscal-year] を書いて保存。
コメント