- 2009-07-07 (火) 15:44
- 未分類
以前書いた、Disable Revisions and Autosave pluginsというエントリーで困っていた、WordPressのパーマリンクを連番にする方法の解決策が分かった。一般的には%postname%、すなわち投稿スラッグを使う解決策が知られているみたいですが、ここではあくまでも%post_id%にこだわって解決しています。
- 関連リンク(%postname%を使った解決策を紹介しているサイト)
- WordPressで公開順に投稿IDを振っていく方法 – Liner Note
- WordPressのURIを公開順で連番にする方法 – (DxD)∞
- WordPress › フォーラム » page_idの数字が書き込んだ順に振り分けられない
- WordPress %post_id%が連番にならない件 | ejtunes.com blog
制限事項
%post_id%にこだわった代償として制限事項(リスク)があります。お試しになる場合は、予めご承知おきの上で試してください。
既に割り振られた%post_id%を連番に修正する過程が入りますので、新たにWordPressを立ち上げた人など、エントリー数がまだ少ない方以外にはお薦めできません。エントリー数の少ない人は連番にこだわらないような気もしますので、要するにあまり需要の無さそうな解決策だということになりますが…。orz
投稿リビジョン機能とメディアライブラリ機能が使用できなくなります。但し、画像のUploadに関しては代替策を用意しています。他のメディアファイルのUploadに代替策があるかどうかは、必要に迫られてないので分かりません。これについては、何か代替策をご存知の方は情報提供をお願いします。
解決策
%post_id%が肥大化する原因は以下のとおり2つあります。この2つの機能を無効(使わない)にしないと、%post_id%の肥大化は止められません。
- 投稿リビジョン機能
- メディアアップロード機能
手順1:投稿リビジョン機能の停止
投稿リビジョン機能を無効化するPluginであるDisable Revisions and Autosave pluginsを導入しました。この対策で投稿リビジョン機能による%post_id%の肥大化は止めることが可能です。但し、もうひとつメディアアップロードによる%post_id%の肥大化が残っています。
手順2:IImage-browser 日本語版の導入(メディアアップロード機能は使用停止)
メディアアップロード機能を使ってメディアファイルをUploadすると、Uploadした各ファイルに%post_id%が割り振られるため、記事数とは無関係に%post_id%が肥大化します。そこで、IImage-browser 日本語版 というPluginを導入しました。この IImage-browser 日本語版 を使用すると、WordPress標準のメディアアップロード機能を使わずに画像ファイルをUploadすることができるようになるので、結果的に%post_id%の肥大化が止められるようになります。但し、アップロードした画像ファイルには%post_id%が割り振られなくなるので、副作用としてメディアライブラリ機能も使用できなくなります。メディアライブラリ機能を使用したい方は、潔く諦めて%postname%を使った解決策を利用してください。
手順3:既存%post_id%の修正
手順2までの解決策は、今後の%post_id%の肥大化を止めるものです。既に発生してしまった欠番は、手順2までの解決策では無くなりませんから、こちらは手作業による修正が必要となります。修正作業は、PhpMyAdminを使って行います。
まず、wp_postsテーブルから、投稿リビジョン及びメディアップロードによるレコードを削除します。
レコード削除によってpost_idフィールドの値が虫食い状になっていますから、それを詰めるようにひとつひとつ修正していきます。
post_idの値はwp_postmetaテーブルにもありますので、こちらもwp_postsの修正に合わせて修正が必要です。
なお、PhpMyAdmin上での修正作業は結構面倒だったので、私はwp_postsテーブルとwp_postmetaテーブルをエクスポートし、テキストエディタにてpost_idフィールドの値を手動修正後、書き戻す方法で修正しました。
手順4:auto_increment のリセット
手順3まで実行すると、過去エントリーの%post_id%が連番になり、今後の投稿も連番になって万々歳…、と思ったら、もうひとつ問題が残っていました。修正後最初の新規投稿に割り振られる%post_id%が最も小さい空番号にならないのです。
この問題の解決がなかなか出来ずに悩んでいたのですが、MySQLのauto_incrementをリセットすることで解決することができました。解決策が判明したのはテック☆クラウド » auto_increment のリセットという記事のお陰でした。その記事はWordPressの記事ではなかった(Nucleusに関する記事だった)のですが、たまたまヒットした記事を読み、「きっとこれだ!」と直感してPhpMyAdminから試してみたところ、ビンゴ!だったのです。
前置きが長くなりましたが、auto_incrementをリセットするにはPhpMyAdminから次のようなSQL文を実行します。
ALTER TABLE table_name AUTO_INCREMENT = 1
今回の場合は、table_nameはリセットしたいのはwp_postsテーブルですから、実際には次のように実行しました。
ALTER TABLE wp_posts AUTO_INCREMENT = 1
これで、無事%postname%を使わず、%post_id%のまま連番のパーマリンクを使用することが出来るようになりました。
- 関連リンク(auto_incrementのリセット方法ついてピックアップ)
- テック☆クラウド » auto_increment のリセット
- MySQLでauto_incrementの値を初期化する方法 – while(life)tech_onoue++;
- アイテムやコメントの削除した後、欠番を作らない方法 – 株式会社M&Aバンク
以上。
- Newer: Plugin:PHP Markdown Extra
- Older: 散策:西丹沢と寺家ふるさと村(7月5日)
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://wp.devgiri.org/75/trackback
- Listed below are links to weblogs that reference
- WordPressのパーマリンクを%postname%を使わないで連番にする方法 from Field Notebook. (2008.07.22→2010.08.11)