TCD テーマのページビルダーの中身が消えたときの原因と戻し方(リビジョンから page_builder をコピーする)

概要説明

TCD のテーマのページビルダーで、更新のあとに本文が消えたときの原因と戻し方。保存のしくみで中身が空になることがあり、リビジョンに残ったページビルダーの値を phpMyAdmin で記事にコピーして戻す SQL と、確かめた結果。

TCD のテーマのページビルダーで記事を直していて、更新を続けて 2 回押したところ、公開ページから本文がすべて消えました。タイトルと説明文は新しくなっているのに、ページビルダーで作った見出し・本文・画像がありません。編集画面を開き直しても、ページビルダーは空でした。

調べると、保存のしくみと、リビジョンに中身が残っていることが分かったので、原因と戻し方をまとめます。

なぜ消えたか

TCD のページビルダーは、保存のときに、編集画面から送られてきたページビルダーの値をそのまま保存します(テーマの pagebuilder/pagebuilder.php の save_page_builder_metabox)。中身が空でも、送られてきた値で上書きします。

更新を続けて 2 回押すと、次の順で本文が消えます。

  1. 1 回目の更新で、正しい中身が保存される。
  2. 保存のあと、編集画面を読み込み直す。
  3. 読み込みの途中(ページビルダーの部品がまだ画面に出ていない)で、2 回目の更新が効く。
  4. 空のページビルダーが送られて、そのまま保存される。これで本文が消える。

更新を押したら、「投稿を更新しました」が出るまで待ちます。画面が切り替わる途中で、もう一度押さないようにします。

リビジョンには中身が残っている

WordPress は、更新のたびにリビジョン(それまでの版)を残します。TCD のページビルダーは、保存のときにリビジョンにもページビルダーの値を書きます。そのため、消える前の版のリビジョンに、ページビルダーの中身が残っています。

ただし、管理画面の「リビジョン」の画面で「このリビジョンを復元」を押しても、戻るのはタイトルと本文の欄だけで、ページビルダーの中身は戻りません(ページビルダーは本文の欄ではなく、カスタムフィールド page_builder に入っているため)。そこで、データベースでコピーします。

戻し方(phpMyAdmin で)

データベースを直接書き換えるので、レンタルサーバーの管理画面などで、必ずバックアップを取ってから行います。

リビジョンを探す

記事の ID(例:1246)は、編集画面の URL の post= の後ろの数字です。

SQL
-- 記事(ID 1246)のリビジョンと、ページビルダーの値の長さを見る
SELECT p.ID, p.post_date, LENGTH(m.meta_value) AS page_builder_length
FROM wp_posts AS p
LEFT JOIN wp_postmeta AS m ON m.post_id = p.ID AND m.meta_key = 'page_builder'
WHERE p.post_parent = 1246 AND p.post_type = 'revision'
ORDER BY p.ID DESC;

結果の見方(例)です。page_builder_length が入っていて、消える前の日時のリビジョンを選びます。

ID post_date page_builder_length 見方
1402 2026-10-11 08:31 812 消えたあと(中身が空で保存された版)
1400 2026-10-11 08:31 8092 これを選ぶ(消える直前の版)
1399 2026-10-11 08:30 (空) ページビルダーの値がない版(使えない)

新しいほうから見て、長さが急に小さくなる手前のものが、消える前のバージョンです。

リビジョンの値を記事にコピーする

SQL
-- リビジョン(ID 1400)のページビルダーの値を、記事(ID 1246)にコピーする
UPDATE wp_postmeta AS pm
JOIN wp_postmeta AS src ON src.post_id = 1400 AND src.meta_key = 'page_builder'
SET pm.meta_value = src.meta_value
WHERE pm.post_id = 1246 AND pm.meta_key = 'page_builder';
SQL の中 変えるもの
1400 上で選んだリビジョンの ID
1246 記事の ID
wp_ データベースの表の頭の文字(wp-config.php の $table_prefix)

値は PHP のシリアライズの形なので、手で書き換えずに、このように丸ごとコピーします。

確かめる

公開ページを開いて、見出し・本文・画像が戻っているかを見ます。キャッシュのプラグインを使っているときは、キャッシュを消してから見ます。

確かめた結果

作業環境(WordPress 7.1・TCD のテーマ)で、リビジョンの値と記事の値が違う記事を選び、上の UPDATE を試しました。1 行が書き換わり、記事の値はリビジョンの値と同じになり、PHP で読める形(unserialize できる)のままでした(試したあとは元に戻しました)。

リビジョンの中には、ページビルダーの値を持たないものもありました(自動保存などで作られたもの)。

まとめ

  • TCD のページビルダーは、送られた値をそのまま保存するので、読み込み中に更新すると中身が空になることがある。更新は 1 回だけ押す。
  • 消えても、リビジョンにページビルダーの値が残っていることが多い。「リビジョンを復元」では戻らないので、データベースで page_builder をコピーする。
  • データベースを触る前に、必ずバックアップを取る。

関連機能

  1. WordPress の robots.txt に p タグや br タグが入るときの直し方:robots_txt フィルターで消す

  2. iframe埋め込みを禁止してクリックジャッキング攻撃を防ぐ

  3. WordPress 予約投稿の失敗を解決 Scheduled Post Trigger

サイドバー

よく使うカスタマイズ

最近の記事

Profile

PAGE TOP