WordPressで複数のフィードを取得する

その他 0 Takuya Kobayashi

おそらくもう使うことは無いだろうけど一応メモ

<?php
$feed_urls = array(
  'https://example.com/feed',
  'https://foobar.net/feed/?post_type=news', //WordPressのポストタイプ毎のフィードを得るときはこうする
);
$showitems = 8;
$feed = fetch_feed( $feed_urls );
if( !is_wp_error($feed) ) {
  $maxitems = $feed->get_item_quantity( $showitems );
  $items    = $feed->get_items( 0, $maxitems );
}
if( $maxitems ) {
  foreach( $items as $item ) {
    //アイキャッチ取得 OGP画像があれば取得するようになっているがメチャ重くなって実用性無し
    $og_target_url = esc_url( $item->get_permalink() );
    $og_target_opt = stream_context_create(array('ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false )));
    $og_target_html = mb_convert_encoding(file_get_contents($og_target_url, false, $og_target_opt), "utf-8", "auto");
    $og_image_result = preg_match('/<meta property="og:image" content="(.*?)"/', $og_target_html, $og_images);
    $og_image = $og_images[1];
    if( $og_image_result ) {
      $image = esc_url( $og_image );
    } else {
      $preg_match = preg_match('/<img[^>]+src=[\'"]([^\'"]+)[\'"][^>]+\>/i', $item->get_content(), $images);
      if( $preg_match ) {
        $image = esc_url( $images[1] ); 
      } else {
        $image = '';
      }
    }?>
    <a href="<?= esc_url( $item->get_permalink() ); ?>" class="item" target="_blank">
      <div class="photo"><?php if( !empty($image) ): ?><img src="<?= $image; ?>" alt=""><?php endif; ?></div>
      <div class="content">
        <time><?= esc_html( $item->get_date( 'Y.m.d' ) ); ?></time>
        <div class="title"><?= esc_html( $item->get_title() ); ?></div>
        <?php $category = $item->get_categories();
        if( !empty($category) ) {
          echo '<div class="category">'.esc_html( $category[0]->get_label() ).'</div>';
        } else {
          echo '<div class="category">カテゴリ無し</div>';
        }?>
      </div>
    </a>
  <?php
  }
} ?>

--
以上