サポート » 使い方全般 » カスタム投稿のアーカイブを年度別に表示したい

  • 現在通常の投稿(post)及びカスタム投稿でアーカイブページを作成しています。

    アーカイブページは、プルダウンで年度を選択し、選択された年度の記事一覧がページ内に表示される仕組みです。

    以下のコードでpostの年度表示は出来ました。

    function.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' );
    
    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 <code>year</code>, COUNT(ID) AS <code>posts</code>
            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 = '&nbsp;(' . $arcresult->posts . ')' . $afterafter;
                $output .= get_archives_link( $url, $text, $format, $before, $after );
            }
        }
     
        if ( $echo )
            echo $output;
        else
            return $output;
    }

    archive.php

    <select name="archive-dropdown" onChange='document.location.href=this.options[this.selectedIndex].value;'> 
      <?php my_get_archives_by_fiscal_year('post_type=post&type=yearly&format=option'); ?>
    </select>年度のトピックス一覧

    ここからカスタム投稿へ流用するにはどのようにカスタマイズすればよろしいでしょうか?
    純粋に変数名を変えてpost_typeをカスタム投稿に合わせただけでは表示しませんでした。

    また、このソースコードのままだとカスタム投稿側の一覧表示もすべての記事が出てくるバグが発生しています。(現在、カスタム投稿アーカイブは「wp_get_archives」を使用)

    ご教示のほどよろしくお願いします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは

    hook が実行されていないのか、sql クエリが意図したとおりになっていないのか、sql クエリの実行結果が意図したとおりになっていないのか、など、var_dump のようなものを使用してデバッグしてみてはどうでしょうか。

    また、

    純粋に変数名を変えてpost_typeをカスタム投稿に合わせた

    というのは、どこを変更されたのでしょうか?

    oisit

    (@oisit)

    関数リファレンス/WP Query

    サイト内検索のカスタマイズ

    年度別でネット検索すると、スレ主さんのやり方の関連記事がヒットしますが、
    wp_queryのdate_queryとか使えないものでしょうか。個人的に使い方(書き方も)がわからないけど。
    beforeに4月1日、afterに3月31日でドロップリストの値をyearにごにょごにょするとか。
    beforeafterは逆かも知れませんが。あと日付の指定の方法とかもわかりませんが。

    あとスレ主さんの疑問に直接答えるレスじゃなくてすいません。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • このトピックに返信するにはログインが必要です。