サポート » 使い方全般 » query_postsでカテゴリIDが複数の場合にページ送りが出来ない

  • 解決済 hosoken0719

    (@hosoken0719)


    今回初めて投稿させて頂きます。
    WordPress初心者ですので宜しくお願いします。

    ”category.php”でカテゴリ一覧を表示する際、URLの末尾に引数でカテゴリIDを渡し、$_GET[‘**’]で受け取っています。

    今困っているのは、カテゴリIDが複数の場合にページ送りが出来ないことです。
    次ページのループ部分には何も表示されなくなってしまします。
    カテゴリIDが1つの場合は$query_stringで条件を引き継いて出来ましたが、複数ある場合は$pagedでページ送りをするというとこまではわかりました。色々試しましたが出来ません。

    ソースは以下の通りです。
    URL:http://***.ne.jp/cat_p=10&price=15

    <?php
    //URLよりカテゴリIDをGET
    $category_p = $_GET[‘cat_p’];
    $price = $_GET[‘price’];

    //配列に格納
    array_push($cat , $cat_p, $price);

    //表示条件設定
    $paged = get_query_var(‘paged’);
    $args = array(‘category__and’ => $cat , ‘posts_per_page’ => 10 , ‘paged’ => $paged);
    query_posts( $args );
    ?>

    //ループ
    <?php if(have_posts()):while(have_posts()):the_post(); ?>

    ~省略~

    <?php endwhile;endif; ?>

    //ページ送り
    <?php posts_nav_link(”); ?>

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

    (@gatespace)

    ページ送りの位置が間違ってるんじゃ。

    <?php
    	query_posts( $args );
    	if ( have_posts() ) : // 該当する投稿がある時
    		/* Start the Loop */
    		while ( have_posts() ) : the_post();
    			// いろいろ
    		endwhile;
    
    		// ページ送りはここに
    
    	endif;
    	wp_reset_query(); // クエリのリセット
    ?>

    トピック投稿者 hosoken0719

    (@hosoken0719)

    早速のご回答ありがとうございます!!

    教えて頂いた通りページ送りの位置を変更したら表示することが出来ました。
    大変感謝します。

    しかし、また問題が発生しましたので、もし分かるようでしたらお願いします。
    ページ送りで5ページ以降になると”category.php”ではなく、”index.php”のテンプレートファイルを参照してしまいます。

    以下の場合は41~50件目が”index.php”になり、
    $args = array(‘category__and’ => $cat , ‘posts_per_page’ => 10 , ‘paged’ => $paged);

    以下の場合は21~25件目が”index.php”になってしまいます。
    $args = array(‘category__and’ => $cat , ‘posts_per_page’ => 5 , ‘paged’ => $paged);

    また、それ以降もずっと”index.php”が読み込まれてしまいます。

    やはり色々試しましたが分からないため、宜しくお願いします。

    モデレーター Takuro Hishikawa

    (@hissy)

    query_postsを使わないほうがいいんじゃないかなと。

    function my_query_vars( $public_query_vars ) {
    	$public_query_vars[] = 'category__and';
    	return $public_query_vars;
    }
    add_filter( 'query_vars', 'my_query_vars');

    http://example.com/?cat=1&category__and=5

    http://example.com/?cat=1&category__and[]=5&category__and[]=10

    トピック投稿者 hosoken0719

    (@hosoken0719)

    その後試した結果、管理画面の”設定>表示設定>1ページに表示する最大投稿数”を10から1に変更したら正しく表示されるようになりました。

    ‘posts_per_page’で表示件数を指定していましたが、裏では10件ずつページが送られているような挙動です。

    詳しい事はよく分かりませんが、とりあえず直って良かったです。

    皆さんアドバイスありがとうございました!!

    モデレーター Takuro Hishikawa

    (@hissy)

    query_postsを使うと、いったんWordPressが初期設定のまま記事を取得したあと、query_postsのタイミングで指定した条件で記事を再取得するという挙動になりますので、query_postsを起動したあとの条件ではページ送りが存在する場合でも、初期設定ではそのカテゴリーの記事はもうないよ、ということが起こります。うまく言葉で説明できませんが。

    カテゴリーを複数指定した場合は、いったん1つのカテゴリーで取得したあと、複数指定で再度取得し直すということになりますので、いまは直ったように見えても、条件によっては再発するでしょう。ご紹介したコードは本来URLのパラメーターとして処理されないcategory__andをURLで指定できるようにするというものです。これを使うか、あるいはquery_postsではなくpore_get_postsのタイミングに変更したほうがいいと思いますよ。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「query_postsでカテゴリIDが複数の場合にページ送りが出来ない」には新たに返信することはできません。