ブログ引越し時のミスでずれてしまった記事番号(以下、投稿idという)を修正したかったのですが、投稿idは最初に自動的に割り振られて簡単には変えられません。かっては投稿idを変更できるプラグインがあったのですが、今はもう入手できず、手修正でデータベースの変更を試みました。
(実際に作業を行ったのは昨年9月ですが、忘れないうちに記録しておきます)
目次
投稿idの変更を検討
変更の動機と手修正を決意するまでの経緯です。
1.ずれてしまった投稿idを修正したい
ブログ移行で投稿idが一部ずれてしまった
下記のブログ移行の記事で紹介しているように、ブログ移行の際、記事ページのurlが変わらないように配慮していました。
ところが移転後暫くしてから、一部の記事の投稿idがおかしいのに気づきました。最終記事の番号の一致を確認して安心していたら、途中でずれが発生していたのです。確認が甘かった(-_-;)
記事番号(投稿ID)は簡単に変えられない
投稿idは投稿記事ページのurlに含まれる数字です。例えばこの記事の場合’https://e-farm.org/blog-entry-9203.html’ですから’9203’が投稿idです。
データベース内で投稿idは全ての基準になっています。他のテーブルから参照されていて、記事テーブルの投稿idだけを変えると参照関係が おかしくなります。参照元も含めて全て変えなければならず、簡単には行かないのです。
2.変更できるプラグインを入手できない
当初は、投稿idを変えることができるプラグイン「Search and Replace」があるので利用すればいい、と気楽に考えていました。ところが、現在はこのプラグインを探しても見つかりません。理由はわかりませんが非公開になってしまったようです。
3.データベースは手修正できる
こうなったらデータベースを直接手修正する方法しかありませんが、素人に簡単にできるのかなと思っていました。
データベースを手修正している人がいる
ネットで調べると、[WordPress] 投稿IDを手動で変更 | きほんのきちうという先人の情報があり、手修正で変更されています。これに力を得て私もやってみることにしました。
修正には phpMyAdmin を使う
phpMyAdminはWordPressのデータベースであるMySQLを管理するためのツールで、ウェブブラウザからMySQLサーバーのデータベースに対して様々な操作が行えます。一部の格安サーバーを除いて、大抵のレンタルサーバーにおいて使えるようになっています。
修正はリスクを伴なう
初心者がphpMyAdminを使うのはリスクが伴ないます。それでも私のようにやりたい人は、当然バックアップを取っておいて、失敗したら元に戻せるようにしておきましょう。
wpXレンタルサーバーの場合、サーバーの管理画面からSQLデータベースのバックアップができます。
手動で投稿idを変える方法
変更の概要
今回の例では投稿idを224から、現在空き番の223に変更するものとして説明します。
データベースの記事テーブルの中から[post_id]が’224’の記事を見つけ出し’223’に変更すると共に、データベース内の[post_id]=224を参照している全てのテーブルについて[post_id]=223を参照するよう変更します。
1.phpMyAdminにログイン
wpXレンタルサーバーの場合、管理パネルの当該WordPressの[設定]から入ると、下の方に[データベース管理]があります。
この中にある[phpMyAdminへのログイン]ボタンをクリックすると、次のphpMyAdminの画面になります。
2.変更するテーブル
上図で左側パネルの[○○_w1](○○はサーバーID)のメニューを開くと、右のようにデータベースの各テーブルが表示されます。
変更すべきテーブルは、先人の教えでは以下の通りでした。(図の赤枠)
- wp_posts
- wp_term_relationships
- wp_postmeta
ところが後になって、以下のテーブル(図の黄枠)も変更が必要なことがわかりました。
- wp_comments
- wp_commentmeta
どこまでWPを使い込んでいるかによって変わってくるので、場合により他にもあるでしょう。
3.テーブルの内容確認と変更
まず’wp_posts’テーブルを開いてみます。左パネルの[wp_posts]をクリックするとテーブルの表示画面になります。
下表は[post_id]が224である記事データ(修正リビジョンも含む)部分を切り取ったものです。
下表の[id]列は主インデックスと言われ、記事を書いたり修正するごとに自動的に新しい番号が振られます。これにより過去のリビジョンを区別できるのです。一番上の行が最初に書いたもので、その時に振られた[id]の224が投稿id[post_id]となります。すなわち、
元祖記事の[id]=[post_id]
です。
上のテーブルは右の方が切れていますが、続きは下のようになっています。
[post_parent]列の2行目以降は、元祖記事の[id](=[post_id])がコピーされ、リビジョンが変わっても引き継がれます。他のテーブルからはこの[post_id]で参照されます。
その右の[guid]列は、元となった直前リビジョンの記事urlです。
省略しますが、他のテーブルも同様にして見ることができます。
また、データベース内の捜し物は[検索]タブで[記事タイトル]や[post_id]等から検索することができます。
各データの変更は、該当の部分をダブルクリックして簡単にできます。
[id]の変更
まず記事の[post_id]を変更します。[id]列の’224’(上図の赤枠)をダブルクリックして’223’に変えます。
[post_parents]列の変更
同様に[post_parents]列の2段目以降の’244’を全て’233’に変えます。
このような変更を必要な全てのテーブルについて行うのですが、上記例のように変更対象の列は複数あったりするので見落とさないよう注意が必要なのと、大変手数がかかります。それで、実際の修正は次項の方法を使います。
4.クエリのUPDATE文を使って置換
どこに修正すべきデータがあるかなどデータベースの概要を理解したら、以下のようにクエリのUPDATE文を使って変更するのが早くて確実です。
クエリでの変更手順
1)[SQL]タブをクリックしてクエリの画面にします。
2)UPDATE文の入力
例えば’wp_postpeta’テーブルのpost_id=224のところを223に変える場合
UPDATE ‘wp_postpeta’ SET post_id=’223′ WHERE post_id=’224’と入力します。(下図)
3)シミュレートで確認
入力できたら右下にある[Simurate query]ボタンを押してシミュレートします。この段階では実際の変更はされませんので安心してください。
このようにエラーのない結果になったらOKです。
4)置換の実行
シミュレーション結果を閉じて先ほどの画面で[実行]ボタンを押すと、post_idの224→223の置換が行われます。
5)テーブル名を変えて実行
変更が必要なテーブル全てについて、’wp_postpeta’の所を変えて上記2.~4.を繰り返せば全ての置換が終了です。
私の場合、変更したいpost_idは一つではなく、たくさんあったのでそれなりに大変でしたが、無事変更することができました。