web関連
【wordpress】ページ番号付きリンクにクエリ文字列が入る件
「…/topics/?test=aaa」みたいにurlにクエリ文字列が入ってると「paginate_links()」で生成したページ番号付リンクが「…/topics/?test=aaapage/2/」という感じでクエリ文字列が入りこんでしまいページャーが上手く動かなかったのでクエリ文字列を置換したときの備忘録
ページャーからクエリ文字列を置換する方法
原因としてpaginate_links()
の中のget_pagenum_link()
がクエリ文字列を含んだurlを返すからpreg_replace()
を使って置換をかける
// …/topics/?test=aaapage/2/
'base' => get_pagenum_link(1).'%_%',
// ↓ preg_replace($正規表現パターン, $置換後の文字列, $置換対象)
// …/topics/page/2/?test=aaa
'base' => preg_replace('/\/\?.*/', '/', get_pagenum_link(1)).'%_%',
正規表現\?.*
でクエリ文字列(\?含む以降の文字列)を/
に置換をかけている
全体としてはこんな感じで、baseパラメータだけ書き換えている
echo paginate_links(array(
'base' => preg_replace('/\?.*/', '/', get_pagenum_link(1)).'%_%',
'format' => 'page/%#%/',
'current' => max( 1, get_query_var('paged') ),
'total' => $the_query->max_num_pages,
));
Ajaxを一覧ページで使っててページャーが上手く動かなかったことが原因で調べた
「'posts_per_page' => '2',」とかで無理くりページャー表示してたけどそもそも「表示設定→1ページに表示する最大投稿数」の部分が「10」にしててそことぶつかって表示がおかしくなってかも…