আইফ্রেমে কোড বাদ না দিয়ে কীভাবে সিম্পলপী ফেচ_ফিড পাবেন?


10

আমি আমার প্লাগইনে একটি রিমোট ফিড দখল করছি এবং কিছু এন্ট্রিগুলিতে আইফ্রেমে কোড রাখতে চাই। যাইহোক, সিম্পলপি 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

সিম্পলপি দস্তাবেজগুলি থেকে এখানে : strip_htmltagsসিম্পলপি অবজেক্টে এটি একটি সম্পত্তি, যা অন্যদের মধ্যে এটির সাথে আমরা রাখতে চাইলে iframe ট্যাগ থাকে।

সুতরাং, wp_kses বাদে সম্ভবত আমরা উপরের সম্পত্তি থেকে ট্যাগটি সরাতে চাই।

উদাহরণস্বরূপ, $rss = fetch_feed( 'http://www.someblog.com/feed/' );আমাদের সিম্পলপী অবজেক্ট দেয়।

যদি আমরা 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 ​​হয় তাই আমরা এন্ট্রি সরানোর জন্য অ্যারে_স্প্লাইস ব্যবহার করি, যেমন:

// 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সম্পত্তি এবং সম্ভবত আমরা সেট করা আছে।

বিজ্ঞপ্তি : উপরের পরীক্ষার জন্য আমি কিছু পরীক্ষার আরএসএস ফিড খুঁজে পাইনি some সুতরাং যদি কেউ এটি যাচাই করতে পারেন তবে দয়া করে কিছু প্রতিক্রিয়া জানান।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.