サポート » 使い方全般 » 特定カテゴリの「年度別」アーカイブ

  • 解決済 tomedia

    (@tomedia)


    「特定カテゴリの年別アーカイブページ」を、”Archives for a category”を使用して作動させています。
    ですが、「年別アーカイブ」を「年度別アーカイブ(4月はじまりの)」に変更したいのです。

    フォーラムの過去記事で「4月はじまり」の年度区切りを導入させてもらったところ、「年度別アーカイブページ」は作成できましたが、カテゴリ指定がきかなくなりました。(全てのカテゴリの年度別アーカイブになってしまいます)

    フォーラム・その他で検索してみましたが自己解決できないため
    お力をお借りしたく投稿させていただきました。
    よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • 未検証:

    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' );

    トピック投稿者 tomedia

    (@tomedia)

    kzさんありがとうございます!
    教えていただいたコードで解決しました。

    解決策が見いだせず
    最悪、「年度カテゴリ」を設けて1月~3月の記事は”前年度”カテゴリに入れる?
    などと考えていたので、スマートな解決策を頂き大変助かりました。

    本当に、ありがとうございました。

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