次のようにURLを指定するにはページネーションが必要です。
current_url?p-page=1
current_url?p-page=2
current_url?p-page=3
それで..これが必要なのは、ページに他のパラメータがあるからです。
問題は、ドキュメントの中では、次のように仕様化されていることです。
フォーマット
(ストリング)(オプション)ページ付け構造に使用されます。デフォルト値は '?page =%#%'です。かなりパーマリンクを使っている場合、これは '/ page /%#%'になります。 '%#%'はページ番号に置き換えられます。デフォルト: '?page =%#%'
そして、私はフレンドリーURLを有効にしています、
どうすればデフォルトを防ぐことができますか?(BTWはまだpage
を使用していますが、私のp-page
を無視します)
current_url/page/1
current_url/page/2
current_url/page/3
これが私のコードです。
echo paginate_links( array(
'base' => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
'total' => $query->max_num_pages,
'current' => max( 1, get_query_var( 'p-page' ) ),
'format' => '?p-page=%#%',
'show_all' => false,
'type' => 'plain',
'end_size' => 2,
'mid_size' => 1,
'prev_next' => true,
'prev_text' => sprintf( '<i></i> %1$s', '<i class="icon-chevron-left"></i>' ),
'next_text' => sprintf( '%1$s <i></i>', '<i class="icon-chevron-right"></i>' ),
'add_args' => false,
'add_fragment' => '',
) );
一時的な解決策として、私はこのようにやっています:
if ($current_page > 1) {
echo '<a href="?p-page='.($current_page-1).'" class="page-numbers prev"><i class="icon-chevron-left"></i></a>';
}
for ($i = 1; $i <= $query->max_num_pages; $i++) {
echo '<a href="?p-page='.$i.'" class="page-numbers '.($current_page == $i ? 'current' : '').'">'.$i.'</a>';
}
if ($current_page < $query->max_num_pages) {
echo '<a href="?p-page='.($current_page+1).'" class="page-numbers prev"><i class="icon-chevron-right"></i></a>';
}
しかし、ドット機能を活用するのは素晴らしいことです。
この部分:
'base' => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
このようなpage
部分を生成しています:
'base' => http://example.tld/page/%#%/
paginate_links()
を覗くと、デフォルトが表示されます。
'base' => $pagenum_link, // http://example.com/all_posts.php%_% :
// %_% is replaced by format (below)
'format' => $format, // ?page=%#% : %#% is replaced by the page number
インラインコメントは%_%
がフォーマットに置き換えられると言っています。
ドキュメンテーションはまた言います:
‘base’
引数の例は"http://example.com/all_posts.php%_%"
であり、‘%_%’
は必須です。‘%_%’
は、‘format’
引数内のの内容に置き換えられます。‘format’
引数の例は"?page=%#%"
であり、「%#%」も必要です。‘%#%’
はページ番号に置き換えられます。
それを使うならば:
'base' => '%_%'
それからformat
引数と同じになります。
これがOPの例の修正です。
echo paginate_links(
[
'base' => '%_%',
'total' => $query->max_num_pages,
'current' => $current,
'format' => '?p-page=%#%',
'show_all' => false,
'type' => 'plain',
'end_size' => 2,
'mid_size' => 1,
'prev_next' => true,
'prev_text' => '<i></i> <i class="icon-chevron-left"></i>',
'next_text' => '<i class="icon-chevron-right"></i> <i></i>',
'add_args' => false,
'add_fragment' => '',
]
);
どこで使用します:
$current = max( 1, (int) filter_input( INPUT_GET, 'p-page' ) );
これはWP_Query
の$query
引数にも入ります。
'paged' => $current,
?p-page=6
の出力例:
<a class="prev page-numbers" href="?p-page=5"><i></i> <i class="icon-chevron-left"></i></a>
<a class='page-numbers' href=''>1</a>
<a class='page-numbers' href='?p-page=2'>2</a>
<span class="page-numbers dots">…</span>
<a class='page-numbers' href='?p-page=5'>5</a>
<span class='page-numbers current'>6</span>
<a class='page-numbers' href='?p-page=7'>7</a>
<span class="page-numbers dots">…</span>
<a class='page-numbers' href='?p-page=99'>99</a>
<a class='page-numbers' href='?p-page=100'>100</a>
<a class="next page-numbers" href="?p-page=7"><i class="icon-chevron-right"></i> <i></i></a>
ps:prev_text
とnext_text
のOPに見られるように、2つの静的文字列を結合するのにsprintf
は必要ありません。現在、その部分は元のスニペットでは正しく表示されないため、削除しました。
それが役に立てば幸い!