サポート » 使い方全般 » WP_Queryでのページネーションについて

  • 解決済 mmaker0930

    (@mmaker0930)


    投稿の一覧ページを作りたくて、固定ページにtopicsというページを用意し、投稿の一覧をwp_queryで取得して一覧ページとしているのですが、ページングに躓いています。

    <?php
    
    	$paged = get_query_var('page');
    	$my_query = new WP_Query(
    		array(
    			'post_type' => 'post',
    			'posts_per_page' => 4,
    			'post_status' => 'publish',
    			'caller_get_posts' => 1,
    			'order'=>'DESC',
    			'orderby'=>'date',
    			'paged'=>$paged
    		)
    	);
    
    	while ($my_query->have_posts()) : $my_query->the_post(); ?>

    としてサブループで投稿一覧を取得し、ページネーションはWP-pagenaviで

    <?php if(function_exists('wp_pagenavi')) { wp_pagenavi(array('query'=>$my_query)); }  ?>

    としています。
    example.com/topics/2/とすればページングされた2ページ目が表示されるのですがWP-pagenaviで生成されたページング部分をクリックすると
    example.com/topics/page/2/へリンクしてしまい、1ページ目と同じ内容が出力されてしまいます。また、echo $pagedしてみると、example.com/topics/2/ではきちんと2と出力されましたが、example.com/topics/page/2/では何も表示できないので、ページ番号を取得できていないようです。

    example.com/topics/2/でもexample.com/topics/page/2/でもどちらでもかまわないのですが、wp_queryでサブループを作った固定ページでページングを働かせるにはどうすればいいでしょうか??

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • $paged = get_query_var('paged') ? get_query_var('paged') : 1 ;

    じゃないですか?

    トピック投稿者 mmaker0930

    (@mmaker0930)

    >pluto1234さん
    それでできました!ありがとうございます!
    ちなみに、それはどのような処理なのでしょうか?お手数ですが、詳しく教えていただけると助かります。

    ?と:がどう働くのがよく分かっていないのですが、三項演算子というものでしょうか?

    また、最近のバージョンではget_query_var(‘paged’) ではなく、get_query_var(‘page’)と聞いていたのですが・・・今後もpagedで問題ないでしょうか?

    お手数おかけしますが、コードの理解のために、もうすこし教えていただけるとありがたいです。

    よろしくお願いいたします。

    if (get_query_var('paged')) {
        $paged = get_query_var('paged');
    } else {
        $paged = 1;
    }

    を if 文を使わずに書くのと同じです。三項演算子だったか条件演算子だったか?名前は忘れました。

    私も ‘paged’ が ‘page’ に変わったようなことを、どうかで見たような気がするのですが、’page’ で動いたことがありません。

    トピック投稿者 mmaker0930

    (@mmaker0930)

    >pluto1234さん
    ご丁寧なご解説ありがとうございます。

    get_query_var(‘paged’)が存在したらそのまま出力、存在しなければ1とする処理なのですね。

    なぜこの処理だと動くのか、まだよく分かってないのですが・・・(頭が悪くてすみません)

    example.com/topics/page/2/にアクセスした時に、僕の最初のコードだと echo $paged;とするとなにも出力されなかったのですが、この場合、$get_query_var(‘paged’)はfalseになり、$paged=1となりそうなのですが、それでも2ページ目が表示されるのは、どういう理屈なのでしょうか・・・?
    0番目が1ページ目、1番が2ページ目ということでしょうか?

    とすると、example.com/topics/page/3/でも$paged=1となってしまいそうなのですが・・・。

    なんども質問を繰り返してしまい、申し訳ありません。
    「コピペでも動けばいい」とも思ったのですが、仕組みを理解したい、というやっかいな性格でして・・。

    お手数ですが、ご教授いただけると大変助かります。

    >なぜこの処理だと動くのか、まだよく分かってないのですが
    2ページ目以降は、プラグイン(wp_pagenav)が、URL に &paged=2, &paged=3・・
    をくっつけるので paged=** が渡ってきますが、1ページ目は paged が何も設定されないので、強引に 1 を設定しています。

    3項演算子の前後で get_query_var(‘paged’) と $paged を echo してみれば分かります。
    また、ページネーションにマウスを合わて、URL がどうなっているのかを見れば分かります。

    トピック投稿者 mmaker0930

    (@mmaker0930)

    >pluto1234さん

    なるほど、本当、何から何までご丁寧にありがとうございました!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「WP_Queryでのページネーションについて」には新たに返信することはできません。