web関連

【wordpress】ページ番号付きリンクにクエリ文字列が入る件

2021/01/06

「…/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」にしててそことぶつかって表示がおかしくなってかも…