<- すべての記事
WordPress 移行
なぜsearch-replaceはシリアル化対応なのか
シリアル化されたデータを壊さずにWordPressサイトのURLを変更する方法。
問題点
WordPressは多くのオプションをPHPシリアル化データの形式で保存します。この形式は各文字列の長さをエンコードします。単純なSQLの検索/置換で異なる長さのURLを置き換えると、宣言された長さが一致せず、WordPressはデータを読み取れなくなります。
具体例
シリアル化されたsiteurlオプション。s:25は25文字の文字列を示しています。
a:1:{s:7:"siteurl";s:25:"https://ancien-domaine.com";}
単純な置換(長さが間違っており、データが壊れる):
a:1:{s:7:"siteurl";s:25:"https://nouveau-domaine.com";}
シリアル化対応(長さが再計算される):
a:1:{s:7:"siteurl";s:26:"https://nouveau-domaine.com";}
ツールの処理方法
- 値がシリアル化されている場合、それをデシリアライズします。
- 配列、オブジェクト、ネストされた文字列を再帰的に走査します。
- 古い文字列を新しいものに置き換えます。
- 再シリアライズします:PHPが自動的に長さを再計算します。
結果:異なる長さのドメインに変更しても、ウィジェット、メニュー、Elementorの設定が壊れることはありません。