プラグインでリモートフィードを取得していますが、一部のエントリには保持したいiframeコードがあります。ただし、SimplePie fetch_feed
はそれを取り除き続けます。これが私のコードと私がすでに試したものです:
kses_remove_filters(); # remove kses filters but SimplePie strips codes anyway
$rss = fetch_feed( 'http://www.someblog.com/feed/' );
$rss_items = $rss->get_items( 0, 2 ); # get two entries for this example
foreach ( $rss_items as $item ) {
# just dump to screen:
echo "<div id='message' class='updated'><p>" . $item->get_content() . "</p></div>";
}
kses_init_filters(); # remove kses filters but SimplePie strips codes anyway
# also tried adding iframe to kses_allowed_html filter:
function se87359_add_filter( &$feed, $url ) {
add_filter('wp_kses_allowed_html', 'se87359_add_allowed_tags');
}
add_filter( 'wp_feed_options', 'se87359_add_filter', 10, 2 );
function se87359_add_allowed_tags($tags) {
// Ensure we remove it so it doesn't run on anything else
remove_filter('wp_kses_allowed_html', 'se87359_add_allowed_tags');
$tags['iframe'] = array(
'src' => true,
'width' => true,
'height' => true,
'class' => true,
'frameborder' => true,
'webkitAllowFullScreen' => true,
'mozallowfullscreen' => true,
'allowFullScreen' => true
);
return $tags;
}
# also made sure not to cache the feed (for testing only):
function do_not_cache_feeds(&$feed) {
$feed->enable_cache(false);
}
add_action( 'wp_feed_options', 'do_not_cache_feeds' );
# in case above doesn't work, set transient lifetime to 1 second:
add_filter( 'wp_feed_cache_transient_lifetime', create_function( '$a', 'return 1;' ) );
SimplePie docsから here :これはSimplePieオブジェクトの_strip_htmltags
_プロパティであり、特に保持したいiframeタグがあります。
したがって、wp_ksesとは別に、おそらく上記のプロパティからタグを削除する必要があります。
たとえば、$rss = fetch_feed( 'http://www.someblog.com/feed/' );
はSimplePieオブジェクトを提供します。
もしvar_dump($rss)
または、次のようにして「きれいに印刷」します。
highlight_string("<?php\n\$rss =\n" . var_export($rss, true) . ";\n?>");
フェッチされたすべてのエントリと_$rss
_オブジェクトのすべてのプロパティが表示されます。それらの中には私たちが探しているものがあります、そして私たちはそれを使ってそれを分離することができます:
highlight_string("<?php\n\$rss->strip_htmltags =\n" . var_export($rss->strip_htmltags, true) . ";\n?>");
これにより、次のようなものが得られます。
_<?php
$rss->strip_htmltags =
array (
0 => 'base',
1 => 'blink',
2 => 'body',
3 => 'doctype',
4 => 'embed',
5 => 'font',
6 => 'form',
7 => 'frame',
8 => 'frameset',
9 => 'html',
10 => 'iframe',
11 => 'input',
12 => 'Marquee',
13 => 'meta',
14 => 'noscript',
15 => 'object',
16 => 'param',
17 => 'script',
18 => 'style',
);
?>
_
上記から、iframeエントリのkey
は10であることに注意してください。したがって、次のようにarray_spliceを使用してエントリを削除します。
_// Remove these tags from the list
$strip_htmltags = $rss->strip_htmltags; //get a copy of the strip entries array
array_splice($strip_htmltags, 10, 1); //remove the iframe entry
$rss->strip_htmltags = $strip_htmltags; // assign the strip entries without those we want
_
これで、iframeエントリがなくなり、_$strip_htmltags
_プロパティから削除されました。おそらく設定されています。
通知:上記をテストするためのiframeを含む「テスト」RSSフィードが見つかりませんでした。したがって、誰かがそれを確認できる場合は、フィードバックを提供してください。