サポート » 使い方全般 » category.phpでのページ送りができません

  • 解決済 mfreeman59

    (@mfreeman59)


    category.phpでWP_PageNaviを使ってページ送りを実装しようとしていますが、2ページ目以降に遷移しようとすると、404になってしまいます。
    調べたところ、get_query_var(‘paged’); がページ番号を取得出来ておらず、$pagedが空になってしまっているようでした。
    どうして取得出来ないのか、わかりません。

    他のページでカスタム投稿を使っているところがあるのですが、そこではget_query_var(‘paged’)を使うまでもなく、global $paged;だけで事足りています。

    以下、category.phpのソース(一部抜粋)です。

    <section class="blog02">
    		<h3>Category:<?php single_cat_title(); ?></h3>
    
    		<?php
    		$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    		global $cat;
    		$cat_info = get_category($cat);
    
    		$wp_query = new WP_Query(
    			array(
    				'post_type' => 'post',
    				'category_name' => $cat_info->slug,
    				'posts_per_page' => 1,
    				'paged' => 2
    				)
    			);
    		if(have_posts()):
    		while($wp_query->have_posts()): $wp_query->the_post();
    		?>
    
    		<div class="post">
    
    		<h3><?php var_dump(2); ?></h3>
    
    		<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
    
    		<ul class="postMeta">
    			<li class="postedDate">Posted on <time><?php the_time('Y/m/d'); ?></time><span class="new"><?php newPost(); ?></span></li>
    			<li class="category">Category:<?php the_category('•'); ?></li>
    		</ul>
    
    		<article><?php the_excerpt(); ?></article>
    
    		</div>
    
    		<?php
    		endwhile;;
    		else: ?>
    		<h4>記事はありません。</h4>
    		<article>
    			<p>お探しの記事は見つかりませんでした。</p>
    		</article>
    		<?php endif; ?>
    
    	<?php wp_pagenavi(array('query' => $wp_query)); ?>
    
    	</section>

    $wp_queryの配列の’paged’のところに数字を入れると、該当ページが開くのですが、他のページ番号に移ろうとしても404になってしまう、ような状態です。

    アドバイス、よろしくお願いします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • モデレーター Takuro Hishikawa

    (@hissy)

    テンプレートで $wp_query を上書きして条件を変更しても、テンプレートが読み込まれるタイミングではすでにクエリーが評価されたあとですので、上書きする前の条件で404であれば404の表示になります。メインクエリーの改変を行いたいのであれば、pre_get_postsフィルターを使いましょう。

    トピック投稿者 mfreeman59

    (@mfreeman59)

    ご回答ありがとうございます!
    早速category.phpの$wp_queryを以下のように書き、

    $wp_query = new WP_Query(
    	array(
    		'post_type' => 'post',
    		'category_name' => $cat_info->slug,
    		'posts_per_page' => 1,
    		'paged' => $paged
    		)
    	);

    functions.phpには以下のものを書き足してみました。

    function lowerPagination($query) {
        $paged = (get_query_var('paged') ? get_query_var('paged') : 1 );
    }
    add_action('pre_get_posts', 'lowerPagination');

    これで、ページ番号は取得出来るようになったのですが、不可解な事に、2ページ目までは表示されるのに、3ページ目以降は404になるという状態になっています。
    archive.phpでも同じように書いてみたら、今度は4ページ目以降で404になるという現象が起きています。

    これはどういうことなんでしょうか・・・?

    モデレーター gatespace

    (@gatespace)

    mfreeman59さんが カテゴリーアーカイブ (category.php) を改変しようとしている事は何なのでしょう?

    改変しなくても、post_type、category_name、は自動で反映されています。
    単純に1ページに表示される投稿の件数のみを、ダッシュボードの表示設定と異なるようにしたい、という事なのでしょうか?

    トピック投稿者 mfreeman59

    (@mfreeman59)

    目的は、「category.phpとarchive.phpでページ送りをしたときに404を出さない」ことです。

    今までの経緯は、
    ①$pagedにページ番号が入ってこず、空になってしまう。
     →pre_get_postsに上記の$pagedの設定を書いたところ、解決。
    ②$pagedは機能しているのに、3ページ目や4ページ目でなぜか404になってしまう。←イマココ

    という感じです。

    モデレーター gatespace

    (@gatespace)

    目的は、「category.phpとarchive.phpでページ送りをしたときに404を出さない」ことです。

    であれば、new WP_Query とか pre_get_posts のことはいったん忘れて
    archive.php、category.phpにWP_PageNaviを入れて正常に動作することを確認してみてはどうでしょう?
    デフォルトテーマと見比べて欲しいのですが、どちらも

    <?php
    if ( have_posts() ) :
        while ( have_posts() ) : the_post();
            // 投稿のループ
        endwhile;
        // このあたりにページ送り
    else :
        // 投稿が無い場合
    endif;
    ?>

    という流れです。

    まずはページ送りがきちんと動くかどうかを確認し、必要に応じてクエリの改変を行うのが良いと思います。

    モデレーター Takuro Hishikawa

    (@hissy)

    確かに。WP_Queryはいったん忘れてもらったほうがよさそうですね。無くてもカテゴリーアーカイブは機能しますから。

    トピック投稿者 mfreeman59

    (@mfreeman59)

    wp_queryとpre_get_postsの設定をきって、ダッシュボードの表示設定から指定したらうまくいきました!
    ここの表示投稿数の指定も、wp_queryを書かずにpre_get_postsの指定だけ書いたらうまくいきました。万事OKです。

    hissyさん、gatespaceさん、的確なアドバイスをどうもありがとうございました!

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「category.phpでのページ送りができません」には新たに返信することはできません。