プラグインのAll in One SEOを削除するにあたり、タイトル・ディスクリプション・キーワードをCocoonに移行したかった時に少しはまったので、手順として残しておきます。
実現したいこと
下記の添付画像のように、今までAll in One SEOを使用して設定したすべての記事のタイトル・ディスクリプション・キーワードを、一括でCocoonに移行します。
注意点
データベースを触るので、必ずバックアップを取っておくようにお願いします。
また、SQLの知識が少し必要になるかもしれません。
試したけどうまくいかなかった方法
下記のReplaceを使用する方法は書き換えは成功したのですが、Cocoonのバージョンのためか(自分はかなり古いCocoonテーマを使っていたので)うまくいきませんでした。
All in one SEO PACKのデータをCocoonに移行する方法
下記の記事はおそらく自分のMySQLのバージョンのため、SQL自体がエラーで実行できなかったのですが、かなりヒントをもらいました。
All in one SEO PACKのデータをCocoon・Simplicityに移行する方法
メタデータが入っているテーブルを見つける
前置きが長くなってしまいましたが、本題に入っていきましょう。
メタデータは○○_postmetaというテーブルに入っています。
通常は、wp_postmetaだと思うのですが、wp_ の部分は接頭辞といい、Wordpressインストール時に変更することができるので、お使いの環境によっては、接頭辞がwp_ではない可能性があります。
phpMyAdminでDBを開き、○○_postmetaというテーブルを見つけてください。
当記事ではメタデータのテーブルはwp_postmetaで進めていきます。
タイトルを移行する
ではSQL文を実行して移行を進めていきましょう。
※最初にも書きましたが以下の作業に進む前にDBのバックアップ作成をお願いします。
wp_postmetaの部分はお使いの環境に合わせて書き換えてください。
UPDATE wp_postmeta as wp_postmeta1
LEFT JOIN wp_postmeta as wp_postmeta2
ON wp_postmeta1.post_id = wp_postmeta2.post_id
SET
wp_postmeta1.meta_value = wp_postmeta2.meta_value
WHERE
wp_postmeta1.meta_key = "the_page_seo_title" AND wp_postmeta2.meta_key = "_aioseop_title"
ディスクリプションを移行する
wp_postmetaの部分はお使いの環境に合わせて書き換えてください。
UPDATE wp_postmeta as wp_postmeta1
LEFT JOIN wp_postmeta as wp_postmeta2
ON wp_postmeta1.post_id = wp_postmeta2.post_id
SET
wp_postmeta1.meta_value = wp_postmeta2.meta_value
WHERE
wp_postmeta1.meta_key = "the_page_meta_description" AND wp_postmeta2.meta_key = "_aioseop_description"
キーワードを移行する
wp_postmetaの部分はお使いの環境に合わせて書き換えてください。
UPDATE wp_postmeta as wp_postmeta1
LEFT JOIN wp_postmeta as wp_postmeta2
ON wp_postmeta1.post_id = wp_postmeta2.post_id
SET
wp_postmeta1.meta_value = wp_postmeta2.meta_value
WHERE
wp_postmeta1.meta_key = "the_page_meta_keywords" AND wp_postmeta2.meta_key = "_aioseop_keywords"
ざっくり解説
ざっくりですが上記コードでなにをしているかタイトルの移行を例に解説します。
自己結合している部分と、更新している部分を分けて考えてみます。
自己結合部分
自己結合の部分をSELECTであらわすと下記のようになります。
SELECT *
FROM wp_postmeta as wp_postmeta1
JOIN wp_postmeta as wp_postmeta2 ON wp_postmeta1.post_id = wp_postmeta2.post_id
WHERE
wp_postmeta1.meta_key = "the_page_seo_title" AND wp_postmeta2.meta_key = "_aioseop_title"
メタデータコピー前に上記SQLを実行した場合、下記のような結果になります。
半分に分けたときに右側にCocoonのデータが右側にAll in One SEOのデータがあるのがわかります。
更新の部分
Update分の更新している部分は下記のようになっていました。自己結合したテーブルの右側のデータを左側に移していたということですね。
SET
wp_postmeta1.meta_value = wp_postmeta2.meta_value
Cocoon以外の場合
補足程度になりますが、、
All in One SEOとCocoonのタイトル・ディスクリプション・キーワードのmeta_keyは下記のようになっています。
Cocoon以外のテーマでもそれぞれのmeta_keyがわかれば、SQL文meta_key部分を書き換えることで、移し替えが可能ではないかと思います。
以上、All in One SEOのメタデータをCocoonに移行する方法でした。
コメント