ぬにょす(挨拶)。
このサイトは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の嵐が吹き荒れます、多分。
基本、自分用なので大したテストもせず使ってます(笑)。
使いたい方は自己責任でどうぞ。
コメント