飛び飛びになっちゃいがちな、記事リンクの番号… 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 をフックして、スラッグの設定時に値を変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// スラッグ連番付番 function incliment_slug($slug) { global $post; // 固定ページの面倒は見ません if (($slug) || ($post->post_type == 'page')) { return $slug; } global $wpdb; $slug = $wpdb->get_var("select max(cast(post_name as unsigned)) from {$wpdb->posts} where post_type = 'post' and post_status not in ('object', 'attachment', 'inherit') and post_name regexp '^[0-9]+$'"); $slug ++; return $slug; } // フィルターフック add_filter('editable_slug', 'incliment_slug'); |
手動であらかじめにスラッグ「1000」を入れておけば、次の新規投稿時には「1001」が付番されます。
おまるくんは1からスタートして、一歩一歩進みますが!
ちなみに、既存記事の最大値+1としているため、個人ブログでは問題ないと思いますが
不特定多数が同時に新規投稿をしているようなケースだと上記コードでは、新規記事が一度保存されるまでは最大値が更新されない=同一番号がふられてしまい、後者が 1-2 な表記の枝番扱いになってしまうのでご注意を。
既に大量に連番じゃない記事があるよ・・・
適当クエリなので全く動作保証はしませんが、post_idリンクで淡々と記事を積み重ねていた場合、
スラッグにはpost-1, post-10とかが設定されているっぽいので、連番で内にせよMySQLで直叩きして直しちゃう、という手はあるかもしれません・・・。
1 |
update wp_posts set post_name = id where post_type in = 'post' and post_status in ('static', 'publish', 'draft', 'private') regexp '^post-[0-9]+$'; |
コメント
La disfunción eréctil psicógena a menudo puede ser algo temporal y pasar sin necesidad de intervención. Existen 4 niveles o fases en el proceso de erección, la fase de iniciación, llenado, rigidez y mantenimiento.
[…] そして、functions.phpに下記のコードをコピペする(参考元サイト)。 […]