この記事は最後に更新してから1年以上経過しています。

「テキスト」モードと「ビジュアル」モードを行き来すると投稿内容の一部が消える

説明

仕事がらサイトの引っ越し作業のお手伝いをすることがあるのですが、今回は引っ越しにあわせてWordPressを「3.7.1」から最新版「4.1.1」にアップデートすることになりました。ここで紹介するのはこの案件で発生したトラブルの話です。

最初に遭遇したのは『投稿編集ページで「プレビュー」ボタンを押しても編集中の内容が表示されない』というもの。これは調べてみると、プラグイン「Custom Field Template」を使用していたのですが、バージョンがちょっと古い「2.1.8」でJavaScriptでエラーが発生していたことが原因でした。最新版「2.3」にアップデートして無事解決できました。

次に遭遇したのが『投稿編集ページで「テキスト」モードと「ビジュアル」モードを行き来すると投稿内容の一部が消える』というもの。まず「投稿内容のid属性などを保存するための対策」で取り上げた問題かなと思ったのですが、実際に消えたタグを確認した感じだとこれとは別の問題でした。

具体的な症状を確認するため、開発環境(WordPress 4.1.1)で投稿内容を数パターン試して検証してみました。

「テキスト」モードの投稿内容「ビジュアル」モードに変えて戻ってきた時の投稿内容変化
<div><form><select></select></form></div><div></div>あり
<form><select></select></form><form><select></select></form>なし
<div><select></select></div><div></div>あり
<div><select><option>a</option></select></div><div><select><option>a</option></select></div>なし
<div><select></select><button>submit</button></div><div><select></select><button>submit</button></div>なし
<div><form><select><option>a</option></select></form></div><div><form><select><option>a</option></select></form></div>なし
<div><form><select></select><button>submit</button></form></div><div><form><select></select><button>submit</button></form></div>なし

以上のことから、div要素の中に空のselect要素が含まれ、かつその他のフォーム要素がない場合、そのselect要素のほかに親のform要素も削除されてしまう感じです。今回引っ越ししたサイトには、この削除されるパターンを含んだ投稿が複数保存されており、何らかの対策を速やかに行わなければなりません。そんなわけで関連しそうなワードでググってみたところ、次(WordPressの「使い方全般」フォーラム)のページが見つかりました。

[解決済み] spanタグが削除される (7 件の投稿)」によると、投稿編集ページの初期化時において投稿内容についHTMLとして適切か調べて不適切な部分は削除される機能が働くことがわかりました。この機能を動作させないためには、次のコードをテーマ内のfunctions.phpに記載すればいいとなっています(コードはそのまま引用させていただきます)。

add_filter('tiny_mce_before_init', 'tinymce_init');
function tinymce_init( $init ) {
	$init['verify_html'] = false;
	return $init;
}

早速このコードを試したところ、無事解決できました(stranger-jpさん、ありがとう)。見つかったページではh3要素内のspan要素が消えるという症状ですが、本件と原因は同じようです。

総論、WordPressのアップデートをまめに行っていれば今回のような事態にはならないでしょう(なぜなら、アップデート時に遭遇し、その時点で解決しなければならないので)。いくつかのバージョンを飛び越えてアップデートするときは複数の不具合に遭遇する確率が上がるので、注意が必要ですね。


最終更新 : 2018年05月27日 10:46


お勧め

the_search_query(2018年5月27日 更新)

void the_search_query( )
検索フォームで入力された検索キーフレーズを表示する。

wp_parse_slug_list(2019年2月23日 更新)

array wp_parse_slug_list( mixed $list )
スラッグのリストをパースする。

get_current_user_id(2013年9月18日 更新)

int get_current_user_id()
現在のログイン済みユーザーのIDを取得抽出する。

wp_cache_set(2023年8月9日 更新)

bool wp_cache_set( mixed $id, mixed $data [, string $flag = '' [, int $expire = 0 ] ] )
任意のデータをキャッシュに保存する。

translate_user_role(2019年5月13日 更新)

string translate_user_role( string $name [ , string $domain = 'default' ] )
ロール(権限グループ)名の翻訳テキストを取得する。