この記事は最後に更新してから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


お勧め

add_shortcode(2018年5月27日 更新)

void add_shortcode( string $tag, mixed $func )
ショートコード(独自タグ)を追加する。ショートコードは、投稿記事内でテキスト内容がない[tag]や、テキストを内包する[tag]テキスト[/tag]の書式で使用できる独自タグのこと。標準の状態では、 the_content関数によって表示する直前のフィルター処理内でパラメータ$funcで指定した関数・メソッドが実行される。

get_user_setting(2022年1月31日 更新)

mixed get_user_setting( string $name [ , string $default = false ] )
ユーザーインターフェイス設定を取得する。

have_posts(2018年5月27日 更新)

bool have_posts( )
次の投稿データが存在するかを調べる。

in_category(2018年5月27日 更新)

bool in_category( mixed $category [ , mixed $post = null ] )
投稿情報が指定したカテゴリーに属しているか調べる。

add_feed(2024年6月24日 更新)

string add_feed( string $feedname, callable $callback )
フィードを追加する。