静的フロントページに投稿を表示するためにカスタムのWP_Query
を使用しています。 paginate_links
関数を使って 番号付きページネーションリンク を生成する。これは私が持っているコードです...
$latest_args = array(
'post_type' => 'post',
'category__not_in' => array( 3 ),
'ignore_sticky_posts' => 1,
'paged' => $paged,
);
$latest_query = new WP_Query( $latest_args );
if ( $latest_query->have_posts() ) :
while ( $latest_query->have_posts() ) : $latest_query->the_post();
get_template_part( 'content', get_post_format() );
endwhile;
if ( $latest_query->max_num_pages > 1 ) :
$big = 999999999;
echo '<div class="pagination">';
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $latest_query->max_num_pages
) );
echo '</div>';
endif;
endif;
wp_reset_postdata();
しかし、これをstatic front page
で使用すると、他のすべてのページにも常に最初のページのコンテンツが表示されます。しかし、クエリ codexで提案されているように にpagedパラメータを追加することで修正されました。
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} elseif ( get_query_var('page') ) {
$paged = get_query_var('page');
} else {
$paged = 1;
}
ページ付けされたページの重複したコンテンツは修正されましたが、番号ベースのページ区切りリンクは常に最初のページに固定されます。常に最初のリンク(1)が現在のリンクとして表示され、残りのページを閲覧するのが難しくなります。
static front page
以外のページで使用した場合、このコードは問題なく動作します。
この問題に対するあらゆる解決策。
編集:更新
すべてのプラグインを無効にしてfunctions.php
からすべてのカスタム開発関数を削除しようとしましたが、それでも問題は解決しません。だから私はこれが私がWP_Query
またはpaginate_links
関数を使っている方法で何かをする必要があると思います。
このコードには間違いがあるはずです。
静的ページはpaged
クエリ変数では動作しません。page
変数が必要です。
これが、2番目のコードブロックがクエリを機能させる理由です。利用可能な場合はpage
varを使用します。
ただし、ページ付けされたリンクコードは常にpaged
を使用します。
...
'format' => '?paged=%#%',
...
だからpaged
query varを送っていますが、page
varを探しています。
解決策は、静的ページから使用する場合は、format
引数にpage
query varを送信させることです。
if ( $latest_query->max_num_pages > 1 ) :
$var = is_page() ? 'page' : 'paged'; // <-- choose var here
$big = 999999999;
echo '<div class="pagination">';
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?' . $var . '=%#%', // <-- use var here
'current' => max( 1, get_query_var($var) ), // <-- use var here
'total' => $latest_query->max_num_pages
) );
echo '</div>';
endif;
テストされていません。