All in One SEOのメタデータをCocoonに移行する【自己結合して更新する】




プラグインの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に移行する方法でした。

コメント

タイトルとURLをコピーしました