web-dev-qa-db-ja.com

RSSフィードでブログのコンテンツを取得する機能

私はRSSフィードURLを取り、最新の2つの記事を取得する関数を作成しようとしています。私は以下のようにfuntions.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
HannesH

まず最初に、関数内で関数を定義しないようにします。 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;
}
3
TheDeadMedic