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
예제를 쉽게 재현 할 수있게하면 도움이 될 것입니다. 비공개 인 경우 원본 피드 에 대한 링크를 공유 할 필요는 없지만 간단히 피드와 같은 예제 피드를 던져서 요점과 같은 온라인 어딘가에 문제를 보여줄 수 있습니다.
Rarst

답변:


1

SimplePie 문서 에서 here :은 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',
     );
?>

위에서 우리 key는 iframe 항목이 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이 포함 된 "test"rss 피드를 찾을 수 없습니다. 누구나 확인할 수 있으면 의견을 보내 주시기 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.