未検証:
function query_for_fiscal_year( $where ) {
global $wpdb, $wp_query, $fiscal_year;
if ( is_year() && is_category()) {
$fiscal_year = (int)$wp_query->query_vars['year'];
$cat = $wp_query->query_vars['cat'];
$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')";
$where .= " AND $wpdb->term_taxonomy.taxonomy = 'category' "
. " AND $wpdb->term_taxonomy.term_id IN ($cat) ";
}
return $where;
}
function my_join( $join ) {
global $wpdb;
if( is_year() && is_category() ) {
$join = "
INNER JOIN $wpdb->term_relationships
ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->term_taxonomy
ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";
}
return $join;
}
add_action( 'posts_where', 'query_for_fiscal_year' );
add_action( 'posts_join', 'my_join' );
kzさんありがとうございます!
教えていただいたコードで解決しました。
解決策が見いだせず
最悪、「年度カテゴリ」を設けて1月~3月の記事は”前年度”カテゴリに入れる?
などと考えていたので、スマートな解決策を頂き大変助かりました。
本当に、ありがとうございました。