通过RSS提要获取博客内容的功能

时间:2015-05-09 作者:HannesH

我正在尝试制作一个函数,它采用rss fedd URL并获取最近的2篇文章。我尝试将代码片段从这里重新制作为Functions中的完整函数。php如下所示。我不想为此使用插件,因为我所查看的插件几乎不可能与我自己的html风格搭配。。。

function fetch_feed_from_blogg($path) {
$rss = fetch_feed($path);

if (!is_wp_error( $rss ) ) : 

$maxitems = $rss->get_item_quantity(2); 
$rss_items = $rss->get_items(0, $maxitems); 
endif;

function get_first_image_url($html)
{
  if (preg_match(\'/<img.+?src="(.+?)"/\', $html, $matches)) {
  return $matches[1];
  }
}

function shorten($string, $length) 
{
$suffix = \'&hellip;\';

$short_desc = trim(str_replace(array("/r", "/n", "/t"), \' \', strip_tags($string)));
    $desc = trim(substr($short_desc, 0, $length));
    $lastchar = substr($desc, -1, 1);
      if ($lastchar == \'.\' || $lastchar == \'!\' || $lastchar == \'?\') $suffix=\'\';
          $desc .= $suffix;
    return $desc;
}

if ($maxitems == 0) echo \'<li>No items.</li>\';
else 
foreach ( $rss_items as $item ) :

$html = \'<ul class="rss-items" id="wow-feed"> <li class="item"> <span class="rss-image"><img src="\' .get_first_image_url($item->get_content()). \'"/></span>
    <span class="data"><h5><a href="\' . esc_url( $item->get_permalink() ) . \'" title="\' . esc_html( $item->get_title() ) . \'"\' . esc_html( $item->get_title() ) . \'</a></h5></li></ul>\';

 return $html;
}
我还试图使它可以在一个页面上使用多次。

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

首先,避免在函数中定义函数。PHP对此没有问题,但这通常是一种“做错了”的迹象,只会导致不必要的头痛。

第二,你的foreach 底部的循环有点格式错误。您需要定义<ul> 在循环外部,然后附加到$html - 否则你只会得到最后一项!

function wpse_187819_get_feed_html( $url ) {
    if ( is_wp_error( $rss = fetch_feed( $url ) ) )
        return; // Bail

    $maxitems  = $rss->get_item_quantity( 2 );
    $rss_items = $rss->get_items( 0, $maxitems );

    $html = \'<ul class="rss-items" id="wow-feed">\';

    if ( $maxitems ) {
        foreach ( $rss_items as $item ) {
            $title = esc_attr( $item->get_title() );
            $link  = esc_url( $item->get_permalink() );

            $html .= \'<li class="item">\'; 
                if ( preg_match( \'/<img.+?src="(.+?)"/\', $item->get_content(), $matches ) )
                    $html .= \'<span class="rss-image"><img src="\' . $matches[1] . \'"/></span>\';

                $html .= \'<span class="data"><h5><a href="\' . $link . \'" title="\' . $title . \'"\' . $title . \'</a></h5></span>\';
            $html .= \'</li>\';
        }

    } else {
        $html .= \'<li>No items</li>\';
    }

    // All done, now close the <ul>
    $html .= \'</ul>\';

    return $html;
}

结束

相关推荐

如何删除或替换默认的RSS2模板?

我正在尝试添加自定义的RSS2模板,但无法停用当前的RSS2提要。删除do\\u feed\\u rss2操作似乎不起作用。我复制了feed-rss2。php到我的主题文件夹并对其进行了修改。但我没有成功删除默认的RSS2模板。remove_all_actions( \'do_feed_rss2\' ); add_action( \'do_feed_rss2\', function( $for_comments ) { if ( $for_comments )