WordPress:記事IDを連番にする

飛び飛びになっちゃいがちな、記事リンクの番号… post_id。
1の次は、10だったり、はたまた100だったりする悲しいWordPressの仕様は気持ち悪い。

1の次は2! 10の次は11!
何事も着実・堅実に一歩一歩じゃないと気が済まない! 堅実が一番だ。
そんな時のためのカスタマイズです。

スラッグを使って連番に見せかける

とは言え、post_idががんがん飛び番になっちゃうのは動かせない事実なので、
パーマリンクでスラッグを使って、スラッグに連番っぽいものを設定するという代替策を取ります。

まずは、各記事のスラッグに連番っぽいものを設定してみた後、パーマリンク設定を変更。

この記事はスラッグに「1」を設定しているので、http://note.omarukun.com/notes/1/ でアクセスできるようになるわけですね。

スラッグに自動で連番を設定する

後は、記事の新規投稿時なんかに、連番のスラッグが自動設定されればいい感じです。
記事の総数で連番を付番するタイプのケーススタディはいくつかあったんですが、この番号から始めたいとか、
間の記事を削除しちゃうと辻褄があわなくなるケースも考慮して。

スラッグが未設定の時、wp_postsから、post_typeが投稿(post)で、数字記載されたのスラッグの最大値を取得し、その値+1 を自動設定する機構にすることに。

editable_slug をフックして、スラッグの設定時に値を変更します。

手動であらかじめにスラッグ「1000」を入れておけば、次の新規投稿時には「1001」が付番されます。
おまるくんは1からスタートして、一歩一歩進みますが!

ちなみに、既存記事の最大値+1としているため、個人ブログでは問題ないと思いますが
不特定多数が同時に新規投稿をしているようなケースだと上記コードでは、新規記事が一度保存されるまでは最大値が更新されない=同一番号がふられてしまい、後者が 1-2 な表記の枝番扱いになってしまうのでご注意を。

既に大量に連番じゃない記事があるよ・・・

適当クエリなので全く動作保証はしませんが、post_idリンクで淡々と記事を積み重ねていた場合、
スラッグにはpost-1, post-10とかが設定されているっぽいので、連番で内にせよMySQLで直叩きして直しちゃう、という手はあるかもしれません・・・。