• 始めまして、最近wordpressを触り始めた初心者です。

    ネット上でも同じ現象が散見されますが、どの方法を取っても解決できなかったため、質問させて下さい。

    以下の環境で
    Wordpress 3.5.1
    WP-PageNavi 2.83

    以下のようなコードを書きましたが、wp_pagenavi が2ページ目から404エラーになります。

    ———————————————
    args = array(
    ‘post_type’ => ‘post’,
    ‘post_category’ => 3,
    ‘paged’ => $paged,
    ‘posts_per_page’ => 9,
    ……
    );
    $myquery = new WP_Query($args);

    <?php if ($myquery->have_posts()) : ?>
    <?php while ($myquery->have_posts()): $myquery->the_post(); ?>

    /* Do stuff */

    <?php endwhile; ?>

    wp_pagenavi(array(‘query’ => $myquery));

    <?php endif; ?>

    ———————————————

    パーマリンク設定周りの問題かと思い、以下のプラグインも試しましたが、動きませんでした。 パーマリンク設定は、Custom Structureにチェックしており、値は「/%category%/%postname%/」としています。

    Top Level Categories Fix
    Custom Post Type Category Pagination Fix

    ちなみに、クエリ条件指定なしのデフォルトの状態でthe_post()している別の画面では、同現象は確認できませんでした。wp_pagenavi の最後のページまで、正常に表示できました。

    何かお分かりになる方いらっしゃらないでしょうか。
    よろしくお願い致します。

10件の返信を表示中 - 16 - 25件目 (全25件中)
  • トピック投稿者 _ygt

    (@_ygt)

    そうですね、そろそろその方向でも考えようかなと思い始めました。

    WP-PageNav 使ってますけどそのようなトラブルに有ったこと無いです。
    wp_pagenavi()で使ってるからトラブルになら無いんですかねぇ。

    カスタムなqueryだと問題あるんですかねぇ。

    何の答えにもなってなくて申し訳ないです。

    $pagedに正しい(想定している)数値が入っているのは確認済みでしょうか?

    トピック投稿者 _ygt

    (@_ygt)

    > $pagedに正しい(想定している)数値が入っているのは確認済みでしょうか?

    ここはまだ確認できていません。
    理由は、2ページ目の情報を取得しに行く前に、404エラーになっているためです。

    archive.phpの1行目にデバッグログを仕込んでみたところ、hogehoge/page/2/のURLにアクセスした場合、ログが出力されませんでした。したがって、archive.phpにアクセスする前に404エラーとなっていることになると思います。現在は、その点の問題解決を試みています。

    ちなみに、wp_pagenavi()って、ページのURLとhtmlを生成しているだけのように見えるのですが、その認識で間違っていないでしょうか。理解されている方がいらっしゃいましたら、教えて頂ければ幸いです。
    もしそうであれば、hogehoge/page/2を受け取ったwordpressが正しくテンプレートの出しわけをしていないことが今回の問題ということになると思います。

    >ページのURLとhtmlを生成
    htmlを作るのでは無く、単純にURLを表示する”pagination”機能が有るだけだと思います。

    $pagedの確認がとれていないのならば、WP-PageNavを停止しカスタムされているqueryで次ページのリンクが有効かをご確認されたらどうでしょう。

    もしも次ページのリンクが有効で表示されるならばWP-PageNavが原因だと特定できますし、404になればqueryの指定に間違いがある、と問題の絞り込みができそうです。

    get_template_part()ではなくPHPのinclude()で呼び出してみてはいかがでしょうか?

    以前別の事でget_template_part()では変数が渡らない事があって、include()に変更したところ問題なく動作するようになった事があります。

    ご参考にしてください。

    トピック投稿者 _ygt

    (@_ygt)

    >>ページのURLとhtmlを生成
    >htmlを作るのでは無く、単純にURLを表示する”pagination”機能が有るだけだと思います。

    失礼致しました、言葉足らずでした。ここでhtmlと言っているのは、ページのリンク部分のhtmlのことです。ページ全体のhtml生成はwp_pagenavi()をコールしているphp全体が行っています。

    >$pagedの確認がとれていないのならば、WP-PageNavを停止しカスタムされているqueryで次ページのリンクが有効かをご確認されたらどうでしょう。

    こちら行ってみましたが、変化ありませんでした。
    get_next_posts_link()を使用して、画面に「Next Page」というリンクを出力し、リンクURLがwp_pagenavi()で生成した2ページ目のURLと同じことを確認し、リンクをクリックしたところ、404になりました。

    ということは、やはりqueryに問題があるのでしょうか。

    トピック投稿者 _ygt

    (@_ygt)

    > get_template_part()ではなくPHPのinclude()で呼び出してみてはいかがでしょうか?

    ありがとうございます。試してみましたが、事象は変りませんでした…

    こんばんわ。

    パーマリンク設定をデフォルトにした状態では表示はされるのですか?
    また、print_rvar_dumpなども使って、正しくpagedが渡っているかも確認してください。

    参考になるかわかりませんが、同じWP-Pagenaviを使用してカスタム投稿タイプのアーカイブページにWP_Queryを使ったときに404エラーがでたのでその時の解決方法を書いておきますね。

    テンプレートでクエリをいじるのではなくアクションフックを使用しました。

    function category_post_query($wp_query){
        if ( $wp_query->is_main_query() && $wp_query->is_category() {
            $wp_query->set( 'posts_per_page', 12 );
    	$wp_query->set( 'cat', 3 );
        }
    }
    add_action( 'pre_get_posts', 'category_post_query' );

    is_main_queryとget_pre_postsを使って特定のページを表示している場合のみグローバル変数$wp_queryの中身を変更します。
    上記の例ですとカテゴリーアーカイブを表示している場合のみ、という条件になっています。

    グローバル変数$wp_queryを呼び出してリンクや次ページを作っているので、テンプレート内でクエリを変更しても大元の$wp_queryの条件を元に2ページ目がないよと判断すれば次のページは404になるっぽいです。

    >やはりqueryに問題があるのでしょうか。
    自分が同様の問題に遭遇しているならそう考えます。

    404になり$pagedが確認できないと言うことですが、404.phpをテーマから外す(フォルダの外に出す or リネームする)と確認できないでしょうか?

10件の返信を表示中 - 16 - 25件目 (全25件中)
  • トピック「WP_Queryでwp_pagenaviが2ページ目から404エラーになります」には新たに返信することはできません。