WordPressのビジュアルエディタでscriptタグが削除されるのを防ぐ

WordPressでiframeやscriptタグを記述しようとしたときは、テキストモード側で記述する。ところが、編集中にビジュアルに切り替え確認などをしたり、ビジュアル側で保存してしまうと、iframeやscriptタグはごっそり削除されてしまう。タグ整形はときには必要な機能かもしれないが、片方で記載できるのにもう片方で削除してしまうというのはちょっと困る。

この自動タグ削除機能を無効にするには、ビジュアルエディタの設定を変更すれば良い。WordPressのビジュアルエディタの実装はTiny MCEであり、Tiny MCEでは使えるタグと使えないタグが定義されていて、消されしまうタグを許可するという設定をfunction.phpに記載することになる。

add_filter('tiny_mce_before_init', function($init) {
	$init['extended_valid_elements'] ='script[src|type]';
	return $init;
});

WordPressでは関数を定義して、その関数をフィルタに適用という形式で記述する方法がよく解説されているが、PHPで無名関数が使えるようになっているので、ここでは関数そのままを渡すような記述にしてみた。このほうがすっきりするので、以前に記載したWordPressのPタグ、BRタグの自動整形に対処するの記事もそのように書き換えてみた。

ここで注意が必要なのは、再編集時にビジュアルエディタから入らないこと。ビジュアルエディタから入ると記事を開いてから削除編集したこと(更新したこと)になってしまう。この場合でも保存しなければデータは削除されていないので、ちょっと面倒だが、そのままの状態でテキストモードにいったん変更し、ブラウザの戻るボタンを押すか、ページから離脱する。そして再度編集ボタン(リンク)を押して編集画面に入ればテキストモードになる。テキストモードから入ればextended_valid_elementsの機能が有効なので、ビジュアルと行き来してもとくに問題ない。