先日お客様から「サイト名は変えるけどサイトの内容はそのままで、example.comからexample2.comに引っ越したい」という要望があり、じゃあ引っ越し作業するかとなりました。
とりあえずexample.comのWPにupdraftという引っ越しプラグインを使ってデータを引っ越すことに。データベース内のドメインを変更して、そのままexample2.comのWPにログインをして、updraftをいれてそっちで復元しました。
特に問題ないはずですが、チェックを続けていると・・・何故かお問い合わせフォーム(ContactForm7)がおかしい。
管理画面からフォームの編集画面を見てみると、フォームは存在しているけど管理者用と返信用メールの設定箇所が全て真っ白でした。なんだこれ・・・と思ってchatgptさんに聞いてみたところ、
原因
シリアライズが破損していたせいでした。以下AIより。
WordPressのデータベース内には、PHPの「シリアライズ形式(serialize)」で保存されているデータが多数あります。
この中には、配列やオブジェクトの情報と一緒に、**文字列の「バイト数」**が含まれているため、**単純なテキスト置換(ドメインの変更)**をすると バイト数と実際の文字列が合わなくなって壊れます。
たとえば:
a:1:{s:4:"site";s:11:"example.com";}
この「s:11」は「11文字」という意味です。これを example2.com
に単純置換すると:
a:1:{s:4:"site";s:11:"example2.com";} ←長さが合わない(実際は12文字)
この結果、WordPressが読み取れず、設定が消えたりエラーになります。
解決するには
引っ越し前のドメイン(今回で言うとexample.com)のワードプレスからWP Migrateというプラグインを使ってドメインの変換をして、sqlを出してそれをphpmyadminからインポートすれば解決しました。
Updraftは普段はバックアップ目的で使ってます。お勧めです。