RSSリーダーをWordPress標準のsimplepieで出力

WordpressでRSS wordpress

WordPressにはSimplePieというrssを取得する仕組みがありますので、そちらを使用します。

作成手順

phpファイルの作成

以下で、指定されたフィードから SimplePie のオブジェクトを取得します。

つまり、「https://soricity.com/feed/」部分に取得したいフィードを入力すると、SimplePieによってRSSが表示されます。

なお、この部分について array 関数を使い、配列にすれば、複数の RSS フィードを同時に取得して、複数の RSS フィードを1つにまとめて時系列に並べて表示することもできます。

<h2><?php _e( '人気のあるニュース:', 'my-text-domain' ); ?></h2>
<?php // RSS フィードを取得します。
include_once( ABSPATH . WPINC . '/feed.php' );
// 以下では二つのサイトのRSSを表示しています。
$rss = fetch_feed( 
  array (
  'https://soricity.com/feed/',
  'https://sukatto.info/feed'
  )
 );
$maxitems = 0;
if ( ! is_wp_error( $rss ) ) : // ちゃんとフィードが生成されているかをチェックします。
    // すべてのフィードから最新20件を出力します。
    $maxitems = $rss->get_item_quantity( 20 ); 
    // 0件から始めて指定した件数までの配列を生成します。
    $rss_items = $rss->get_items( 0, $maxitems );
endif;
?>
<div class="rss_road">
<ul>
    <?php if ( $maxitems == 0 ) : ?>
        <li class="blogroll-list"><?php _e( 'No items', 'my-text-domain' ); ?></li>
    <?php else : ?>
        <?php // Loop through each feed item and display each item as a hyperlink. ?>
        <?php foreach ( $rss_items as $item ) : ?>
            <li class="blogroll-list">
                <a href="<?php echo esc_url( $item->get_permalink() ); ?>"
                    title="<?php printf( __( 'Posted %s', 'my-text-domain' ), $item->get_date('j F Y | g:i a') ); ?>">
                    <?php echo esc_html( $item->get_title() ); ?>
                </a>
            </li>
        <?php endforeach; ?>
    <?php endif; ?>
</ul>
</div><!--rss_road-->

上記をテキストエディタにて「fetch_feed.php」として保存して子テーマの中にアップロードします。

function.phpの編集

ショートコードをfunction.phpに登録して、先ほどのphpファイルを呼び出せるようにします。以下ではファイルの場所を子テーマの中という指定にしています。

//ショートコードを使ったphpファイルの呼び出し方法
function my_php_Include($params = array()) {
 extract(shortcode_atts(array('file' => 'default'), $params));
 ob_start();
 include(STYLESHEETPATH . "/$file.php");
 return ob_get_clean();
}
add_shortcode('myphp', 'my_php_Include');

WordPressのsimplepie

表示用のショートコード

[myphp file="fetch_feed"]

※上記[]は全角で記入してありますが実際は半角で使用します。

Date.php on line 694エラーの対処

下記のようなA non-numeric value encountered(数値以外の値があります)というエラーが表示された場合の対処になります。こちらのエラーはPHP7以降に表示されるエラーとのことで表示された場合の対処です。

Warning: A non-numeric value encountered in /home/example.com/public_html/wp-includes/SimplePie/Parse/Date.php on line 694

エラーの対策

DATEに関してなにやらエラーを吐き出すとのことで『/wp-includes/SimplePie/Parse/Date.php』 694行目の編集をおこないます。

$second = round($match[6] + $match[7] / pow(10, strlen($match[7])));

(int)を$matchの前に三か所挿入します。

$second = round((int)$match[6] + (int)$match[7] / pow(10, strlen((int)$match[7])));

以上で表示されていたwarningはなくなりRSSのみになります。

この対策ですがWordpressのコアファイルの編集となっているため、アップデートにより再度必要となるケースがあります。

4.9で問題なく動いていたものから5.1に変更したところ、同様の症状となり再度編集しました。