Iframe कोड को अलग किए बिना SimplePie fetch_feed कैसे प्राप्त करें?


10

मैं अपने प्लगइन में एक रिमोट फीड पकड़ रहा हूं और कुछ प्रविष्टियों में 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;' ) );

1
यह उपयोगी होगा यदि आपने उदाहरण को आसानी से प्रतिलिपि प्रस्तुत करने योग्य बना दिया। यदि यह निजी है, तो आपको मूल फ़ीड का लिंक साझा करने की आवश्यकता नहीं है , लेकिन आप केवल उदाहरण फ़ीड को फेंक सकते हैं, मुद्दे का प्रदर्शन कर सकते हैं, कहीं न कहीं ऑनलाइन।
दुर्लभ

जवाबों:


1

SimplePie डॉक्स से यहां : strip_htmltagsSimplePie ऑब्जेक्ट में एक संपत्ति है, जो दूसरों के बीच में यह 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',
     );
?>

ऊपर से हम ध्यान दें कि keyiframe प्रविष्टि 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 फ़ीड नहीं ढूँढ सका। इसलिए यदि कोई इसे सत्यापित कर सकता है, तो कृपया कुछ प्रतिक्रिया दें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.