WordPress 投稿・固定ページのIDをSQLで変更する方法

WordPressでは、投稿や固定ページ、カスタム投稿タイプの各コンテンツに一意のID(投稿ID)が割り当てられており、
このIDは内部データベース(主に wp_posts
テーブル)で管理されています。
通常、投稿IDは自動採番され変更不可ですが、サイト移行やリンク調整などの理由で投稿IDを直接変更したい場合があります。
本記事では、SQLを用いて投稿・固定ページのIDを安全に変更する手順を解説します。
また、ID変更に伴う関連データの更新方法や注意点も詳述しますので、ぜひ参考にしてください。
作業前の準備
- 必ず事前にデータベースの完全バックアップを取得してください。
phpMyAdminやMySQLダンプ、もしくはバックアッププラグインを活用してください。 - 作業はメンテナンスモード下で行うことを推奨します。
wp_
の部分は環境によって異なるテーブルプレフィックスに置き換えてください。
投稿IDの管理と関連テーブル
テーブル名 | カラム名 | 用途 |
wp_posts | ID | 投稿・固定ページの主キー |
wp_postmeta | post_id | 投稿に紐づくカスタムフィールド |
wp_term_relationships | object_id | 投稿とカテゴリー・タグの紐付け |
wp_comments | comment_post_ID | コメントの投稿ID紐付け |
(プラグイン固有テーブル) | post_id またはobject_id | プラグインによって異なる参照 |
ID変更時は、これら全てのテーブルで該当IDを一括更新しなければなりません。
注意事項
- 新しいID(例:456)が既に存在しないことを事前に確認してください。
- ID変更は非常にリスクが高いため、本番環境ではなく、ステージング環境等で十分に検証してから実施してください。
- テーマやプラグインでIDをハードコーディングしている場合は、それらも適宜修正してください。
- ID変更により内部リンク切れや表示不具合が発生することがありますので、作業後にサイト全体の動作確認を入念に行ってください。
投稿IDを変更するSQL操作手順
以下の例では、投稿IDを 123 から 456 に変更する手順を示します。
-- 変更対象の投稿を確認
SELECT * FROM wp_posts WHERE ID = 123;
-- 1. 投稿本体のID変更
UPDATE wp_posts SET ID = 456 WHERE ID = 123;
-- 2. カスタムフィールドのpost_id更新
UPDATE wp_postmeta SET post_id = 456 WHERE post_id = 123;
-- 3. カテゴリー・タグ関連のobject_id更新
UPDATE wp_term_relationships SET object_id = 456 WHERE object_id = 123;
-- 4. コメントのcomment_post_ID更新
UPDATE wp_comments SET comment_post_ID = 456 WHERE comment_post_ID = 123;
-- 5. 必要に応じてプラグイン独自のテーブルも更新
-- 例:WPML多言語対応テーブル
-- UPDATE wp_icl_translations SET element_id = 456 WHERE element_id = 123;
※環境によりプラグイン独自のテーブルが存在する場合は、同様にやカラムの更新が必要です。
作業後の対応
- WordPress管理画面の「設定」→「パーマリンク」画面で「変更を保存」をクリックし、パーマリンク設定を再生成してください。
- キャッシュ系プラグインを利用している場合は、キャッシュをクリアしてください。
- IDを直接指定したショートコードやカスタムリンクがある場合は、手動で修正が必要です。
関連記事