Elementorで作成されたサイトのURLをテスト用のものから本番用のものに変更する作業で地味にはまってしまいましたので、内容を残しておきます。
普段 WP-CLIでコマンドラインでURLやテキスト置換を行っておりましたので、特に気にせずいつもどおり置換作業を行っておりましたが、何故か置換対象に含まれずそのまま残ってしまいました。。。
Elementorの保存データ確認
Elementorで作成されたデーは “wp_postmeta” テーブルに meta_keyが “_elementor_data” というレコードに保存されています。
また形式は、WordPressでよくあるシリアライズ化されたものではなくJSONエンコードされた形で保存されています。
置換出来なかった原因
上記でも書いたようにElementorの保存データはJSONエンコードされているため単純にURLを指定してもURLの文字列はJSONエンコードされてしまっているため置換対象に含まれないため置換が出来ませんした。
シリアライズ化とJSONエンコードのデータ比較
$arr = ['url'=>'https://example.com/test','name'=>'サンプル'];
上記の配列で定義した変数をシリアライズ化とJSONエンコードした内容をみてみます。
配列をシリアライズ化した変数を var_dump() で出力
string(92) "O:8:"stdClass":2:{s:3:"url";s:24:"https://example.com/test";s:4:"name";s:12:"サンプル";}"
配列をJSONエンコードした変数を var_dump() で出力
string(71) "{"url":"https:\/\/example.com\/test","name":"\u30b5\u30f3\u30d7\u30eb"}"
各型式を見てみるとすぐわかりますが、”https://examle.com” や “サンプル” というテキストを置換対象の条件にしても対象がなく置換が出来ないという状況でした。
暫定的な対応(Elementorのツール)
WP-CLIやその他WordPress向けに用意されたツールやプラグインでも置換出来る方法はあるのかもしれませんが、今回は Elementorで用意されているURL変更用のツールを用いて対応いたしました。
管理画面の Elementor > ツール > URLを変更 と進むと以下のURL変更用の画面が表示されますので、左に置換対象のURLを入力、右側のフォームに変更後のURLを入力し変更ボタンをクリックします。
動作環境情報
エックスサーバー(x10) PHP 7.3.16 MySQL 5.7 WordPress 5.4.2 Elementor 2.9.12
コメント