サポート » 使い方全般 » 月別アーカイブページのページネーション

  • 解決済 chatm

    (@chatm)


    あるカテゴリーページの月別ページのページネーションで2ページ目以降が表示されず困っております。
    カテゴリーページのページネーションは2ページ目以降も問題なく表示されます。
    https://ドメイン/カテゴリー/page/2/

    このカテゴリー(cat=9)の月別アーカイブページだとページネーションの2枚目以降が表示されません。
    https://ドメイン/date/2023/5/?cat=9

    このカテゴリーページに設定したphpはこちらです
    カテゴリIDが9の場合で最新4件だけ表示(他はページネーションで別ページへ)

    <?php if(have_posts()): while(have_posts()): the_post(); //ここからループ ?>
        
        <?php
    	$args = array(
    	  'cat' => 9,
    	  'paged' => $paged,
    	  'posts_per_page' => 4
    	);
    	$the_query = new WP_Query( $args );
    	if ( $the_query->have_posts() ) :
    	  while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    	<?php endwhile; endif; wp_reset_postdata(); ?> 
    
    	<h2 class="post-title"><?php the_title(); //記事のタイトルを表示 ?></h2>
        
    	<?php the_content(); //記事の内容を表示 ?>
        
        <div class="post-data">
        <span class="date"><?php the_date('Y/m/d'); //記事の日付表示 ?></span>
        &nbsp;|&nbsp;<?php the_category(','); //記事のカテゴリー表示 ?>
        </div>
        
        <?php endwhile; endif; //ループ終わり ?>
    
    <!-- pegenation -->
    <div class="pagination pagination-index">
    	<?php echo paginate_links( array( 
    		'type' => 'list',
    		'prev_text' => '&laquo;',
    		'next_text' => '&raquo;'
    	) ); ?>
    </div>
    • このトピックはchatmが10ヶ月前に変更しました。
5件の返信を表示中 - 1 - 5件目 (全5件中)
  • shokun0803

    (@shokun0803)

    chatmさん、こんにちは。

    $pagedが空じゃないですか?

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

    などのように取得してます?

    ご参考になれば。

    トピック投稿者 chatm

    (@chatm)

    ご返答ありがとうございます。そのコードを追加してみても変化ありません。カテゴリー名ならページ送りできるのですが。
    date.php など作って月別一覧のページ送りを別に設定すればうまくいくのでしょうか。

    Aki Hamano

    (@wildworks)

    やりたい事としては以下であっていますか?

    • オリジナルテーマ(クラシックテーマ)を作っている
    • アーカイブページテンプレート(archive.php等)を編集している
    • アーカイブページで、GETパラメータにcatがあった時に、その値をterm_idとしてクエリに追加したい

    コードを見ると、メインクエリ(have_posts())の中でさらにサブクエリ($the_query->have_posts())を回しているのが気になります。

    アプローチとしては、「pre_get_postsフックで、特定の条件下だけクエリを書き換える(GETパラメータを追加する)」というのが良い気がします。

    そうすれば、アーカイブテンプレート側は何も変更しなくても良いはずです。(paginate_links()関数のパラメータは調整が必要だったかもしれません)

    以下サンプルコードです。
    注:動作検証はしていません。内容を十分理解した上で、環境に合わせて適宜下さい。

    <?php
    // GETパラメータにcatがあった場合、クエリに追加する
    function custom_pre_get_posts( $query ) {
      // 管理画面のクエリまたはメインクエリまたは月別アーカイブではない場合は何もしない
      if ( is_admin() || ! $query->is_main_query() || ! is_month() ) {
        return;
      }
    
      // GETパラメータ取得
      $cat = get_query_var( 'cat', 0 );
    
      if ( $cat > 0 ) {
        // クエリ追加
        $tax_query = array(
          array(
            'taxonomy' => 'your_taxonomy_name',
            'field'    => 'term_id',
            'terms'    => $cat,
          ),
        );
        $query->set( 'tax_query', $tax_query );
      }
    }
    add_action( 'pre_get_posts', 'custom_pre_get_posts' );
    
    // クエリ変数を追加する
    function custom_query_vars( $vars ) {
      $vars[] = 'cat';
      return $vars;
    }
    add_filter( 'query_vars', 'custom_query_vars' );
    
    トピック投稿者 chatm

    (@chatm)

    ご返答ありがとうございます。
    ・オリジナルテーマを自作し、wp6.2.2グーテンベルグで稼働させています。
    ・カテゴリー●●ページの一覧アーカイブページを作ってcategory-●●.phpというテンプレートにして、上記のコードを書いています。
    ・カテゴリーや子カテゴリーの一覧ならページ送りができるのですが、月別アーカイブだけがページ送りできません。
    たぶん、ダッシュボードの表示件数は12件ですが、このカテゴリー●●だけfunction.phpで4件だけ表示させる設定をしています。
    これが怪しいのかもしれません。下記の●●はカテゴリースラッグ名です。
    4は表示件数です。これを外せば表示件数12件超えればページ送りできそうな気もしますが。

    //ページの表示件数を、特定のカテゴリーアーカイブや投稿タイプによって変更する
    function my_paginate(){
        global $wp_query, $paged;
     
        $p_base = get_pagenum_link(1);
        $p_format = 'page/%#%';
     
         
        if($word = strpos($p_base, '?')){
         
            $p_base = get_option(home).(substr(get_option(home), -1 ,1) === '/' ? '' : '/')
                .'%_%'.substr($p_base, $word);
        } else{
         
            $p_base .= (substr($p_base, -1 ,1) === '/' ? '' : '/') .'%_%';
        }
        echo paginate_links(array(
            'base' => $p_base,
            'format' => $p_format,
            'total' => $wp_query->max_num_pages,
            'current' => ($paged ? $paged : 1),
            'end_size' => 1,
            'mid_size' => 2,
        )); 
    }
     
    function change_posts_per_page($query) {
     if( is_admin() || ! $query->is_main_query() ){
         return;
     }
      
     //  「●●」のカテゴリーページで表示件数を4件にする */
     if ( $query->is_category( array('●●') )) {
         $query->set( 'posts_per_page', '4' );
         return;
     }
      
    }
    add_action( 'pre_get_posts', 'change_posts_per_page' );
    
    • この返信は10ヶ月前にchatmが編集しました。
    トピック投稿者 chatm

    (@chatm)

    function.phpの記述を削除したらできました。お騒がせしました。
    ご返答頂きありがとうございます。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「月別アーカイブページのページネーション」には新たに返信することはできません。