function.phpでショートコードを定義し、その中で記事を取得していた。記事の中にiframeがあった場合にうまく表示できなかったので解決してみた。
WordPressには「wp_kses_allowed_html」関数が提供されているので、これを使う。
「wp_kses_allowed_html」ではHTMLタグをcontextに与えることで、許可させることが可能になるそう。
wp_kses_allowed_html() – Function | Developer.WordPress.org
Returns an array of allowed HTML tags and attributes for a given context.
許可したいタグ「iframe」とその属性で許可するものを配列で定義するだけです。
function custom_wpkses_post_tags( $tags, $context ) {
if ( 'post' === $context ) {
$tags['iframe'] = array(
'src' => true,
'height' => true,
'width' => true,
'frameborder' => true,
'allowfullscreen' => true,
);
}
return $tags;
}
add_filter( 'wp_kses_allowed_html', 'custom_wpkses_post_tags', 10, 2 );
実装はシンプル。この内容はGitHubのissueを参考にしています。先人の方に感謝。