WordPressのpage builder系のプラグインを持っているテーマもありますが、これがテストサイトから本番サイトへ移設する際にドメインの文字列数変更で
うまく表示されなくなってしまうという現象があります。
昨日記事で「wp_postmetaのシリアライズ化されたデータを加工する(テーマオプション・ドメイン変更対応)」を書きましたが、page builder の移設の場合も原因は同じでした。昨日の記事では、シリアライズ化されたデータに対して再帰的な処理が出来てなかった為テーマオプションの一部までしか移植できてなかったのかもしれません。
phpの内部処理は同じです。一度配列化し、置換してから再度シリアライズ化します。out.txt というファイルにupdate 構文のSQLを置くことで、phpMyadminからpage builder のpostmeta 情報に対してUpdateしてもらえれば、無事移植できるかと思います。
<?php // --------------------------------- // エスケープ文字を忘れずに! // --------------------------------- $before = "http:\/\/blog.zamuu.net\/before"; $after = "http:\/\/blog.zamuu.net\/after"; $DB_HOST = 'mysql418.db.sakura.ne.jp'; $DB_USER = 'sante-corp'; $DB_PASS = 'sante753; $DB_NAME = 'sante-corp_wp_sante'; /************************** * シリアライズデータの変換 **************************/ function convert($meta_value){ $serial_data = $meta_value; $serial_data = mb_convert_encoding($serial_data, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); // デシリアライズ化(Object形式でなく配列で返却) $ary = unserialize($serial_data); if(is_array($ary) === false){ echo "ary ERROR !!!f"; return false ; } //多次元配列を再帰的に処理して 'before' をすべて 'after' に置き換える。 array_walk_recursive($ary, function (&$val, $key) { $val = str_replace($before, $after, $val); }); return serialize($ary); } $arrOut = array(); try{ // ----------------- DB $mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); $mysqli->set_charset("utf8"); $sql = "SELECT * FROM wp_postmeta WHERE meta_key='page_builder'"; // echo $sql; if ($result = $mysqli->query($sql)) { // 連想配列を取得 while ($row = $result->fetch_assoc()) { // var_dump($row); $rest = convert($row["meta_value"]); $ret = "update wp_postmeta set meta_value= '" . $rest . "' where meta_id=" . $row["meta_id"]; array_push($arrOut, $ret); } // 結果セットを閉じる $result->close(); } // ----------------- DB }catch(Exception $e){ echo $e; } foreach($arrOut as $k => $v){ $line = $v . ";\r\n"; file_put_contents("out.txt" , $line, FILE_APPEND); } // var_dump($arrOut); ?>