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

WordPress

ぬにょす(挨拶)。

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

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

なんかこう、うまい具合に
 http://amiiby.com/0009
 http://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');

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の嵐が吹き荒れます、多分。

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

コメント

タイトルとURLをコピーしました