今回は誰が何と言おうと備忘録です。
表題の通り、WordPressのページネーションのページ番号をゼロ埋め(ゼロパディング)して2桁に揃える必要がありました。
こんなんさくっと調べりゃすぐ出来ると思ったのですが、みんなわざわざこんな事やらないのか、思いのほか情報がない・・・
しれっとGPT-4oに進化していたChatGPT先生とあーでもないこーでもないと相談しながら、以下のコードで実装できました。
(いわずもがなfunction.phpはバックアップを取っておいて下さいね)
function.php
// ページネーションのページ番号をゼロ埋め function custom_pagination_zero_fill($link) { // リンク内のページ番号 $link = preg_replace_callback('/<a[^>]*?class="page-numbers"[^>]*?>([0-9]+)<\/a>/', function($matches) { $page_num = str_pad($matches[1], 2, '0', STR_PAD_LEFT); return str_replace($matches[1], $page_num, $matches[0]); }, $link); // 現在のページ番号 $link = preg_replace_callback('/<span[^>]*?class="page-numbers current"[^>]*?>([0-9]+)<\/span>/', function($matches) { $page_num = str_pad($matches[1], 2, '0', STR_PAD_LEFT); return str_replace($matches[1], $page_num, $matches[0]); }, $link); return $link; } add_filter('paginate_links_output', 'custom_pagination_zero_fill');
補足
- 「class=”page-numbers”」の箇所は出力されるhtmlによって変わる場合があるので、適宜変更して下さい。
- コードをご覧頂ければ分かる通り2桁までしか対応していません・・・100ページを超える場合はまたその時に考えます・・・
蛇足
アーカイブページのページネーションは「echo paginate_links」で出力しています。
ちなみに最初はページネーションを「the_posts_pagination」で出力して「paginate_links」フィルタを使っていたのですが、それだとなぜかうまく動きませんでした。
なぜかは分かりません。