我正在尝试制作一个函数,它采用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 = \'…\';
$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;
}
我还试图使它可以在一个页面上使用多次。
最合适的回答,由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;
}