Я получаю удаленный канал в своем плагине, и некоторые записи содержат код 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 здесь :
strip_htmltags
свойство является свойством объекта SimplePie, которое, помимо прочего, имеет тег 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?>");
это даст нам что-то вроде ниже:
Из вышесказанного мы отмечаем, что
key
запись iframe равна 10. Поэтому мы используем array_splice для удаления записи, например:Теперь запись iframe вышла из
$strip_htmltags
свойства и, вероятно, мы настроены.Обратите внимание : я не смог найти "тестовый" RSS-канал, содержащий некоторый iframe для проверки вышеупомянутого. Так что если кто-то может это проверить, пожалуйста, оставьте отзыв.
источник