私はこれが死について議論されたトピックであることを知っています、しかし、私は多くの解決策を読みました、そしてなぜ私のページ付けが単にうまくいかないか理解することができません。
非常にシンプルなカスタムwp_queryがあります。
$current_page = (get_query_var('paged')) ? get_query_var('paged') : 1;
$project_query = new WP_query(array(
'post_type' => 'project',
'paged' => $current_page,
'posts_per_page' => 50
));
そこには2000
プロジェクトがありますので、間違いなくページがあります。
これは私のテーマのindex.php
にあります。
とにかく、URL /p/pageno
は404を返します。関数next_posts_link('Older Entries »', $project_query->max_num_pages);
は常に空です。
私はいくつかの同様の質問を読んで、試してみました。
/p/2
など404はしないでください)が、next_posts_link()
は2ページ目で停止し、それ以上は進みません。get_query_var('paged')
をget_query_var('page')
に変更$project_query
を$wp_query
に名前変更迷っていますが、これはとても単純なはずですが、ページネーション常にがWordpressで作業するときに私を殺してしまうことのようです。
ページネーションの問題のほとんどは、テンプレートファイル内のコードを実行する前に行われるクエリとテンプレートの読み込みプロセスの誤解に起因していると思います。
誰かがページを要求したとき:
WordPressはリクエストを解析し、着信URLに基づいてそれが何のためにあるのかを決定します。たとえば、メインのルートページなのか、category
で始まるのか、単一の投稿のパターンと一致するのか、ページ番号があるのかなどです。正しいクエリ変数は、このプロセスから設定されます。
WordPressは、最後の手順で設定したクエリ変数を使用して、データベースに対してメインクエリを実行します。
WordPressはメインクエリの結果を見て、それが成功したかどうか、または結果が生成されなかったかどうかを判断します。それが成功した場合、WordPressはその種類のリクエストに適したテンプレートをロードします。そうでなければ404テンプレートをロードします。
それで、上記のすべてが期待通りに行けば、あなたはついにテンプレートの中に入ります。しかし、今、私たちは一つの問題の原因を見ることができます - そのメインクエリが結果を生成しなかったなら、あなたはあなたのカスタムクエリを実行するためにテンプレートに達することは決してないでしょう。そのメインクエリは、テンプレート内のカスタムクエリとは関係ありません。カスタムクエリにそのページ番号の結果があるかどうかは、メインクエリに対応するページがない場合は関係ありません。この場合の答えは、メインクエリが起こる前にを pre_get_posts
で修正することです。そのクエリは、テンプレート内で別のクエリを実行する代わりに、必要な結果を得ます。
あなたがあなたの質問で言及するもう一つの選択肢は、静的なページを使うことです。これは、メインクエリに関する上記の動作の例外です。スタティックページは、URLに設定したページ番号に関係なく、その単一ページのコンテンツを返します。これが、メインクエリで404の問題を回避する方法です。その場合、Kaiserが彼の答えで述べているように、next/previous postsリンク機能を使用するときには正しいクエリーオブジェクトを参照しなければなりません。
あなたの主な問題は以下のとおりです。
WP_Query
vs. WP_query
..これを見てください。
$project_query = new WP_Query( array(
'post_type' => 'project',
'paged' => get_query_var('paged') ? get_query_var('paged') : 1,
'posts_per_page' => 50
) );
var_dump( get_next_posts_link( "Older Entries →", $project_query->max_num_pages ) );