【WordPress】 インポート時に「script」「iframe」などのタグが削除されてしまう【#np2020】

諸々の準備が整ってさあ記事をインポートしましょうと勇んでインポートツールを実行したら、記事内の「script」タグや、「iframe」タグが勝手に削除されてしまうという現象が起きました。恐らくタグの使用を禁止する設定があってそれが作用しているんだろうなと予想は付くんですが、実際どこでどう設定されていて、どうすれば変更出来るのかわからず。そんなにレアなケースなのかしらこれ。


例えば、こういうテキストをインポートすると、


料理:カメ五郎さん

「ドブ式スープ」って自分で言うなww
美味そうなんだよなあ……


インポート後の記事はこうなっています。


料理:カメ五郎さん

「ドブ式スープ」って自分で言うなww 美味そうなんだよなあ……


タグのところがまるっとない。全てのタグが削られているわけではないので、明らかにフィルタリングされています。



解決方法:functions.phpでフィルタリングを上書きする

ヒントになったのはこちらの記事です。


WordPressの怪 – 投稿画面から一部のタグや属性が消えてしまう現象 – | MONSTER DIVE

この案件、マルチサイトなんですよ。 シングルサイトだと、管理者もしくは編集者権限であれば問題なく使用できるのですが、マルチサイトだと、ネットワークの特権管理者権限でないとダメらしいのです。なにゆえ!!?



確かに普通に記事投稿をするのであれば、特権管理者なら問題は起きません。が、インポートだと特権管理者がないと判断されるのか、タグが全部消えてしまうみたいです。ということは、つまり上の記事の「解決方法その2」にあるとおり許可するタグのルールに使いたいタグを追加してやれば良いんですね。

というわけで、以下の通り設定。


function my_wp_kses_allowed_html( $tags, $context ) {
   if ( $context === 'post' ) {
       $tags['script'] = array(
           'src' => true
       );
       $tags['iframe'] = array(
           'width'         => true
           ,'height'       => true
           ,'scrolling'    => true
           ,'frameborder'  => true
           ,'class'        => true
           ,'src'          => true
       );
   }
   return $tags;
}
add_filter( 'wp_kses_allowed_html', 'my_wp_kses_allowed_html', 10, 2 );


本文の投稿時に、scriptタグとiframeタグを許可する設定です。

最初は単純に、


$tags['script'] => true


って書いてみたんですが、それだと、


料理:カメ五郎さん

<script></script> 「ドブ式スープ」って自分で言うなww
美味そうなんだよなあ……


となってしまいました。属性も書き出さないといけないようです。



なにはともあれ、これで無事インポートが出来ました。良かった良かった……



ちなみに:許可タグのリストはどこにあるか

wp-includes/kses.phpで設定されているグローバル変数 $allowedposttags がそれらしいです。まんまの名前ですね。

ほんとにホワイトリストだったんだ……