サポート » 使い方全般 » 月別アーカイブなのに全件表示される

  • 解決済 sasasa24

    (@sasasa24)


    ご覧いただきありがとうございます。表題の件で困っております。
    date.phpは用意していません。archive.phpのみ使用しています。
    URLはきちんと2017年2月ならhttp://○○.jp/2017/02、2016年5月ならhttp://○○.jp/2016/05となるのですが表示されているのは全件です。
    それ以外のカテゴリアーカイブはきちんと表示され、ページネーションも正常に動きます。

    <?php $args = array(
    		'posts_per_page' => 10,
    		'paged' => $paged,
    		'orderby' => 'post_date',
    		'order' => 'DESC',
    		'post_type' => 'post',
    		'post_status' => 'publish'
    	);
    	$the_query = new WP_Query($args);
    	
    	if ($the_query->have_posts()) : 
    	while ($the_query->have_posts()) : $the_query->the_post();
    ?>
    
    ループされる内容
    
    <?php
    	endwhile;
    	endif;
    ?> 
    
    <?php //ページネーション
    	if ($the_query->max_num_pages > 1) {
    		echo paginate_links(array(
    			'base' => get_pagenum_link(1) . '%_%',
    			'format' => '/page/%#%/',
    			'current' => max(1, $paged),
    			'total' => $the_query->max_num_pages
    		));
    	}
    	wp_reset_postdata();
    ?>

    何か間違いがありましたらご指摘頂けますと幸いです。
    よろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • CG

    (@du-bist-der-lenz)

    デフォルトのテーマと比較して工夫しましょう

    LABE

    (@latobeam)

    本題からは逸れますが、 archive.php なのに WP_Query をお使いですか?
    posts_per_page で表示件数を変更しているだけと見受けられますが、その場合 pre_get_posts アクションを使う方法がより効率的で一般的です。
    これは functions.php に書きます。

    function my_pre_get_posts( $query ) {
        if ( is_admin() || ! $query->is_main_query() )
            return;
        if ( ! $query->is_home() || ! $query->is_search() )
            $query->set( 'posts_per_page', 10 );
    }
    add_action( 'pre_get_posts', 'my_pre_get_posts' );

    ループのほうは3ヶ所の $the_query-> を抜けばOKです。

    また、この場合 paginate_links() のほうも書き換える必要があります。
    といっても WP_Query を使わなくなったので $the_query をグローバル変数の $wp_query に書き換えるというだけです。

    global $wp_query;
    if ( $wp_query->max_num_pages > 1 ) {
        echo paginate_links(array(
            'base' => get_pagenum_link(1) . '%_%',
            'format' => '/page/%#%/',
            'current' => max(1, $paged),
            'total' => $wp_query->max_num_pages,
        ));
    }

    それと wp_reset_postdata(); も不要になります。
    ただ仮に WP_Query を使う場合、 wp_reset_postdata(); の正しい位置は endwhile;endif; の間ですね。

    トピック投稿者 sasasa24

    (@sasasa24)

    LABE様、細かくご指示いただきありがとうございました。
    query_postsは非推奨だからWP_Queryに、とばかり思っていました。
    根本が違っていたようで・・・ループについてまだまだ勉強不足でしたので、
    LABE様のコードを見本にさせていただき、上手く動作するようになりました。
    ありがとうございました。

    URL の情報をパースした後に、WordPressがデフォルトのループを作るので、WP_Query で新しいループを作る場合、そこら辺の情報が無視されます。(自分で設定を書けば良いのですが)

    メインのループなのか、新しく作ったループなのか、と切り分けると解りやすくなります。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「月別アーカイブなのに全件表示される」には新たに返信することはできません。