Wordpressを4.4にあげたらAmazon商品リンクが全部消えたでござる、の巻

やわなべです。

先日、サイトのサーバーをPHP7にあげたんですが、、Wordpressを4.4に上げるのには躊躇してました。

というのも、あちこちいじりまくってるんで、wordpressのバージョンアップの方が、不具合が起こるリスクが高いんですよねぇ。

♪ だのにー、なーぜー

先ほど、つい魔が差して更新ボタン押しちゃいました。

たいていは問題ないケースがほとんどなんですが、今回は残念ながら影響あり。それも、

過去記事のAmazon商品リンクが全て消えてしまう

という、かなりキッツい事態に陥りました。

今しがた復旧させたところですが、どうやら記事中に配する「ショートコード」の書き方によっては、4.4へのアップグレードのタイミングでショートコードが動かなくなるというケースがあるようですよ。

スポンサーリンク

WordPressのショートコードとは

私は、Amazonの商品リンクは自前で表示するコードを書いていて、各記事からはショートコードで呼び出すようにしてました。

ショートコードというのはwordpressのカスタマイズに使われるもので、記事中に大カッコ([])でくくった部分を、表示の際に動的にHTMLタグに変更するための仕組みです。

具体的には、記事を編集する際に、[amazon:ASINコード] みたいに書けば、その部分がAmazonの商品リンクのタグに勝手に変換されるようにしてたんですけど、4.4にアップデートしたらHTMLタグに変換がされず、全部カッコ書きのまんま表示されてしまいました。うわー。

他のショートコードは動いてるんで、どうやらアマゾン商品リンクだけがダメっぽい。いろいろやってるとどうやら、ショートコードのコマンド名(この例だとamazon)の後ろにスペースがないのが気に入らないようだってことがわかりました。

WordPressのリファレンスサイトであるCodexを見ると、正しい書式は

[gallery id=”123″ size=”medium”]

のように書くようです。

Shortcode API « WordPress Codex

ちゃんと読みなさいよ>自分

実際、記事のひとつのショートコードを [amazon:ASINコード] から [amazon ASINコード] と、コロンを半角スペースへ書き換えると動きました。

要は最初っから間違った書き方してた私が悪いんですが、4.3まではそれでも動いてたってことですね。

ミッション:過去記事の商品リンクのショートコードを全部書き換えろ

さて、原因は分かったとして、復旧させるには過去記事内で「[amazon:ASINコード]」と書いてる「コロン」を、全部「[amazon ASINコード]」と「半角スペース」に書き換えればいい。

なーんて、言うだけなら簡単なんですけどね。泣きながらやりましたよ。この暮の忙しい時期になんでこんなことせにゃならんのよ。

幸い、つい先日、全記事で使ってる画像をGoogleフォトに全変換する、みたいな荒療治をやったばかりだったので、wordpressの内部構造を覚えてたぶん、スムースに対応できました。

作業はすべてエックスサーバのphpMyAdminから行います。

まずは、記事が入ってるwp_postsのテーブルをバックアップ。

create table `wp_posts_20151215` like `wp_posts`;

このSQL文で、記事の入ったテーブル「wp_posts」と全く同じ構造のテーブル「wp_posts_20151215」が作成されます。

が、作っただけで中身は空なので、ここへ、wp_postsテーブルの全データを流し込みます。

insert into `wp_posts_20151215` select * from `wp_posts`;

2つのデータ件数が同じことを確認します。これでwp_postsに万が一のことがあっても、wp_posts_20151215 を リネームすれば元に戻せる体制が整いました。

さあ、ではwp_postsの記事本文が入ってる部分のショートコードを一気に変換かけますよ。呼吸を整えてー。はい、ヒッヒッフー。

UPDATE `wp_posts` SET post_content=REPLACE (post_content,”[amazon:”,”[amazon “);

バックアップとってるはずなんだけど、なんだか胃が痛くなってきたよ。どうしてだろう母さん。

変換自体は一瞬で終了。250記事ほどを一気に変換かけましたが、問題なく動いてるようです。ホッ。

というわけで最後に動作確認。オッケーそうだから寝ます。
みなさんもwordpressのバージョンアップには、十分に注意しましょうね。