WordPressの記事へAmazonのトラッキングIDを間違えて挿入したときはどうすればいいの?

個人サイトで、WordPressの記事へAmazonのトラッキングIDを間違えて挿入してしまい、ずっと気が付いていませんでした。2週間ほど気づかず、あるサイトで全然クリックがないのでおかしいと思い調べたところ判明しました。

単純には、投稿一覧の検索でAmazonのトラッキングID(ここでは例として「xxxx-2222」とします)をキーワードにして探して、編集することになります。文字列置換が簡単にできるテキストエディタを別途起動しておいて、本文をそちらへ転載してから一括置換して、それを本文へ戻して更新という手順を繰り返すわけですね。はっきり言って面倒ですね…

Movable Typeとかは確か一括置換の機能がWebインタフェースで提供されていたような気がしますが、WordPressはそういう機能がすぐにはみあたりませんでした。ということで、「DBを直接操作でもいいかなぁ」と考えて調べてみました。MySQLでDBへアクセスできる必要があります。

WordPressの記事本文に「xxxx-22」という文字列が含まれる記事のIDは下記で調べられます。

select ID from wp_posts where post_content like "%xxxx-22%";

IDの値がnの記事について、「xxxx-22」という文字列が含まれる記事を「yyyy-22」へ置換した記事にするには、下記のようになります。

UPDATE `wp_posts` SET post_content = REPLACE(post_content, "xxxx-22", "yyyy-22") where ID=n;

簡単ですね。ただ、注意が必要で、WordPressは履歴の記事も保存するので、それを除外する必要があります。post_statusで見てあげると良さそうです。

select distinct(post_status) from wp_posts;

とりあえず、対象としたほうがいいのは、’draft’, ‘publish’, ‘future’でしょう。下記で対象となるIDがわかります。

select ID from wp_posts where post_content like "%xxxx-22%" and (post_status in ('draft', 'publish', 'future'));

こういったDB操作は、あまり全自動でやると怖いので、SQLで一気にやるのではなく、上記で出力されたIDを指定するSQL文を用意して実行するのが安全です。対象が非常に多いなら、プログラムを組んだ方がいいでしょうね。12, 18, 20 という3件だったら、下記のような感じになります。

UPDATE `wp_posts` SET post_content = REPLACE(post_content, "xxxx-22", "yyyy-22") where ID in (12, 18, 20);
同じタグの記事: CentOS
同じタグの記事: MySQL
同じタグの記事: WordPress
同じカテゴリの記事: Linux
関連書籍: CentOS
関連書籍: WordPress