例えば、こういうテキストをインポートすると、
料理:カメ五郎さん
「ドブ式スープ」って自分で言うな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
がそれらしいです。まんまの名前ですね。ほんとにホワイトリストだったんだ……