Facebook にシェア
[`evernote` not found]
LINEで送る

パーマリンクを作成する際に
201304170055 のように日付+投稿IDのパーマリンクにしたいとふと思いました。
そこでパーマリンクを
/%year%%monthnum%%day%%post_id%/
にしたのですが、これだと投稿IDが55のときは
2013041755
となり、投稿IDが2020の場合は
201304172020
と桁数が変わってしまいます。
気分的にどうせなら桁を揃えたいと思い55の時は201304170055のように0で揃えたいと思ったのですがなかなかいい解決方法が見つかりませんでした。
そこでWordpressフォーラムに聞いていました。


なるほど。投稿IDではなくパーマリンクをスラッグにして
/%year%%monthnum%%day%%postname%/
スラッグに投稿IDを桁を揃えて登録すればそれっぽくなるとのこと。なかなかおもしろそうだったので早速実装してみました。
functions.phpに

/* 投稿IDをスラッグにする */
function slug_postid($post_id) {
	$post = get_post($post_id);
	$post_name = $post->post_name;
	// numeric.
	if (!is_numeric($post_name)){
		$newpots = array();
		$newpost['post_name'] = sprintf("%05d",$post_id);
		$newpost['ID'] = $post_id;
		wp_update_post($newpost);
	}
}
add_action('publish_post', 'slug_postid', 10, 1);

function rename_slug(){
	$_posts = get_posts(array("numberposts"=>-1));
	foreach($_posts as $_post){
		slug_postid($_post->ID);
	}
	echo "スラッグを変更しました。";
}

と追加して記事を投稿してみると、無事スラッグが投稿IDになりました。
過去の記事も投稿ID可させたいときは一度どこかでrename_slugを実行させるとすべての投稿記事が投稿IDになります。

*追記
作成してから気が付きましたが、publish_postにフックしてますが、これだと公開後もう一度データベースに書き込むのでどうも
気になると思い調べたらwp_unique_post_slugかwp_insert_post_dataあたりを使ったほうがよさそうです。
参考: