如何在不剥离IFRAME代码的情况下获得SimplePie Fetch_Feed?

时间:2015-04-02 作者:johnh10

我正在我的插件中获取一个远程提要,有些条目有我想要保留的iframe代码。然而,SimplePiefetch_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;\' ) );

1 个回复
SO网友:Cubakos

来自SimplePie文档here: 有一个strip_htmltags 属性,其中包含要保留的iframe标记。

因此,除了wp\\u 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\',
     );
?>
综上所述,我们注意到key iframe条目的值为10。因此,我们使用array\\u 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 属性,可能我们已经设置好了。

注意:我找不到一个;“测试”;rss提要包含一些iframe来测试上述内容。因此,如果有人能够验证,请提供一些反馈。

结束

相关推荐

导入大量RSS提要

我开发了一个网站,我想在其中显示来自其他网站的RSS提要的帖子。我使用过wordpress ofc,在RSS导入器的大量尝试和错误之后,我发现多导入器插件完全符合我的需要(不,自动登录不符合我的需要)。我的问题是,现在我正在从130个RSS提要导入提要,服务器内存不足,网站严重滞后。我将网站迁移到一个新的VPS中,它有4个内核和8GB的RAM,每次检查新的RSS时,都会占用所有RAM,每6个小时就会导致mySQL服务器崩溃。简单地说,现在的网站速度非常慢,mySQL每4-6小时就会崩溃一次。如何提高该网站