WordPressを更新した際にコードエディタからビジュアルエディタに変わってしまい、記述していた<p>タグや<br>タグが表示されなくなってしまったことがありました。
ブロックエディタではカスタムHTMLブロックという機能があり、カスタムHTMLブロック内では自由に任意のHTMLやJavaScriptなどを書き込むことができるようになっています。この中で書かれたコードはビジュアルエディタに一度変更してもタグ等の消失を免れることができます。
1.カスタムHTMLブロックを使う
カスタムHTMLブロックを使うのは簡単で、ビジュアルエディタからなら「フォーマット」内の「カスタムHTML」を押すだけですが、短いコードが入るだけなので、コードエディタのまま直接書き込めばいいだけです。
1 2 3 |
<!-- wp:html --> この中は任意にコードを書き込める <!-- /wp:html --> |
ここで一つ問題が…。新規記事はカスタムHTMLブロック用のコメントをいれるとして、今まで書いたコードはすでにタグが消えてしまっています。今更コメントを追加しても出てるくわけではありません。しかし過去記事のコードを確認すると、書き換わったわけではないらしい。どうやら表示されていないだけで、データベース上は存在しているようです。ならば、データベースで直接<!– wp:html –><!– /wp:html –>を追加すればいいですね。
しかし過去記事すべてに一つ一つ追記するのは面倒です。なのでSQLを使います。
2.データベースを直接書き換える
今回、私のサイトでは特に問題は見られませんでしたが、過去記事を一括でカスタムHTMLブロックにする場合変な影響がないかどうか十分に注意して自己責任でお願いします。大抵は問題なさそうですが…。例えば<!– wp:html –>の中に<!– wp:html –>を入れ子にした場合、コードが消失したり勝手にコピーされたりといった挙動がみられました。
データベースをいじる際は失敗したときに復元できるようバックアップを忘れずに取ってください。
必要なデータのみを出力する
まずは余計なデータに書き込まないように、必要なデータのみを取りだせる条件を調べます。例えば私の場合はこれでした。
1 2 3 4 5 |
SELECT `ID`,`post_content`,`post_title`,`ping_status` FROM `wp_pkb_posts` WHERE `ping_status` = 'open' AND `post_content` IS NOT NULL AND `post_title` != '自動下書き' |
条件はサイトによって変わると思うので、必要に応じて書き換えてください。
- データを抽出するSELECT文
-
SELECT
列名1
,列名2
,列名3
FROMテーブル名
WHERE列名
条件1
AND列名
条件2; - 条件を指定するWHERE文
列名
比較演算子 値列名
IS NOT NULL ※列のデータが空ではない時
データを書き換える
書き換えたいデータの抽出条件が確定したら、その条件の記事内容をそのままに頭に<!– wp:html –>、末尾に<!– /wp:html –>を書き加えます。WHERE以降の条件は先ほど決めた抽出条件と同じにします。
1 2 3 4 5 |
UPDATE `wp_pkb_posts` SET `post_content`= CONCAT('<!-- wp:html -->', `post_content`,'<!-- /wp:html -->') WHERE `ping_status` = 'open' AND `post_content` IS NOT NULL AND `post_title` != '自動下書き' |
- データを更新するUPDATE
-
UPDATE
テーブル名
SET列名1
=値1
,列名2
=値2
WHERE列名
条件1
AND列名
条件2; - 文字列を結合するCONCAT関数
-
CONCAT(‘文字列1′,’文字列2’)
※連結する文字列にNULLが含まれると返り値もNULLになるので注意
※引数に列名を指定することで現在入力されているデータを連結文字に指定できる
WordPressの管理画面を確認すると、私の場合はこれで問題なくタグが表示されるようになりました。