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


お勧め

wp_save_post_revision(2024年1月10日 更新)

int | WP_Error | void wp_save_post_revision( int $post_id )
現状の投稿のリビジョンを作成する。

get_the_author_posts_link(2019年8月21日 更新)

string get_the_author_posts_link( )
投稿者アーカイブページのリンクを取得する。

get_year_link(2012年2月2日 更新)

string get_year_link( mixed $year )
年アーカイブのURLを取得する。

register_taxonomy(2022年6月1日 更新)

WP_Taxonomy | WP_Error register_taxonomy( string $taxonomy, array | string $object_type, array | string $args = array() )
タクソノミーを登録する。

wp_add_object_terms(2013年8月6日 更新)

mixed wp_add_object_terms( int $object_id, mixed $terms, mixed $taxonomy )
投稿情報などにタクソノミーを追加する。