WordPressのパーマリンクで%post_id%の桁を揃えてみた

WordPress

ぬにょす(挨拶)。

このサイトはWordPressを使っていて、パーマリンク設定はシンプルに /%post_id% にしています。
SEO的には記事名が良いなど言われてますが、投稿のたびにslugを入力するのは面倒なので。

ただ、生成されるURLが
 https://amiiby.com/9
とか
 https://amiiby.com/13
とかって、なんかショボいじゃないですか。

なんかこう、うまい具合に
 https://amiiby.com/0009
 https://amiiby.com/0013
みたいにしたいなー、と。

そんな風に考えるのはきっと私だけじゃないはず!と思って、プラグインとかfunctions.phpの実装例とか検索してみたんですけど。
見つかりませんでした。(私だけだった!)

無いものは作るしかないですね。

<?php define('ZEROPAD_FMT', '%04d'); function zeropad_add( $url, $post, $leavename=false ){ $permalink = get_option( 'permalink_structure' ); if ( strpos( str_replace( '%post_id%', '', $permalink), '%' ) !== false ) { return $url; } if ( is_object($post) ) { if ( $post->post_type == 'post') { $new_url = home_url( str_replace( '%post_id%', sprintf(ZEROPAD_FMT, $post->ID), $permalink) ); // error_log("[$post->ID]:$url"); // error_log("[$post->ID]:$permalink"); // error_log("[$post->ID]:$new_url".PHP_EOL); return $new_url; } else { return $url; } } else if ( $post ) { $new_url = home_url( str_replace( '%post_id%', sprintf(ZEROPAD_FMT, $post), $permalink) ); // error_log("[$post]:$url"); // error_log("[$post]:$permalink"); // error_log("[$post]:$new_url".PHP_EOL); return $new_url; } // error_log("[$post]/[$url]".PHP_EOL); return $url; } function zeropad_remove( $post_rewrite ){ $new_rules = array(); foreach ($post_rewrite as $key => $value) { if ( strpos( $value, 'p=$matches[1]' ) !== false) { $new_rules[str_replace( '([0-9]+)', '0+([0-9]+)', $key )] = $value; } } return $new_rules + $post_rewrite; } add_filter( 'the_permalink', 'zeropad_add', 10, 2); add_filter( 'post_link', 'zeropad_add', 10, 3); add_filter( 'post_rewrite_rules', 'zeropad_remove');
Code language: PHP (php)

GitHubに置いておきます。-> https://github.com/miyabi-satoh/ZeroPad

スポンサーリンク

中身の解説(ちょっとだけ)

投稿へのリンクを生成する際に呼び出されるフィルタ”the_permalink”と”post_link”に処理を追加しています。
パーマリンクの構造に%post_id%以外の変数が使われていない場合に、%post_id%を投稿IDに先頭0を付与した形で置換します。

管理画面の設定 – パーマリンク設定で更新ボタンを押された際に(多分)呼び出されるフィルタ”post_rewrite_rules”に処理を追加しています。
既存の投稿へのrewriteルールをもとに、投稿IDの先頭0を除去した値を使用するように変更し新たなルールとして追加します。

上記のrewriteルール更新があるため、機能の有効/無効を切り替えたらパーマリンク設定の更新ボタンをポチッとしてやる必要があります。
これを忘れると404 Not Foundの嵐が吹き荒れます、多分。

基本、自分用なので大したテストもせず使ってます(笑)。
使いたい方は自己責任でどうぞ。

コメント