ブログの新着情報をRSSを使って表示する

【PR】本ページはプロモーションが含まれています

ブログを新しいテーマで作成したので2点補足しておきます。

1点はブログをディレクトリ型で別テーマとする手順
もう1点は別テーマとなったブログの新着情報を旧テーマに表示する方法です。

前者に関しては前回の記事であまりにもサラッと流していますので補足が必要だと考えました。

後者についてはRSSをjsonデータで処理する記事の応用です。

スポンサーリンク

ディレクトリをホームにしたブログ

元々当社のサイトはホームディレクトリに管理用のフォルダーを作り、そこにWordPressをインストールして運営しています。

設定→一般で、WordPressアドレスにWordPressをインストールし、サイトアドレスに実際のURLを入れればWordPressのアドレスとサイトのアドレスを別にできます。

こうすることで、ホームディレクトリーを分かりやすく整理することが出来ます。

例えば「www」と「blog」という2つのフォルダーを作り、「www」にはコーポレートサイト用のWordPressをインストールし、「blog」にブログ用のWordPressをインストールするというような使い方ができるわけです。
まさに当社のWordPress構成がこのようになっています。

スポンサーリンク

コーポレートサイトにブログの新着情報を表示する

以上のように2つのWordPressをインストールした場合、データベースは別々のものです。
そのため、コーポレートサイトはブログの更新情報にアクセスすることが出来ません。

このような場合、RSSを使ってブログの更新情報を取得します。

先の記事「WordPressのRSSをjsonデータで処理する」ではjQueryでRSSを処理することが前提となっていました。

今回はWordPressどうしのデータのやりとりなので比較的簡単です。
jsonデータを処理したときと同じように「rss-php」を使ってRSSを取得し、ブログの日付とタイトルを抽出します。

※「rss-php」については以下のブログを参照して下さい。

参照 「Google Feed API」の代替として「rss-php」でRSSやAtomフィードを取得・表示する(www.lesson5.info)

では、実際にWorgPressテーマTCD「unique」の当社コーポレートサイトで、別のWorgPressテーマとなった当ブログの更新情報を表示するカスタマイズを見ていくことにします。

front-page.phpを修正

WorgPressテーマTCD「unique」でブログの最新情報を表示する箇所は「front-page.php」の先頭にあります。

<?php get_header(); $options = get_desing_plus_option(); ?>

<?php // Content Builder -------------------------------------- ?>
<div class="box_list clearfix" id="index_contents">
 <div class="box-sizer"></div>
 <?php
			if (!empty($options['contents_builder'])) :
				foreach($options['contents_builder'] as $content) :

					// Recent Post --------------------------------------
					if ($content['cb_content_select'] == 'recent_post') {

						$headline = $content['cb_recent_post_headline'];
						$button = $content['cb_recent_post_button'];
						$color = $content['cb_recent_post_color'];
						$font_color = $content['cb_recent_post_font_color'];
						$show_date = $content['cb_recent_post_show_date'];
						$date_color = $content['cb_recent_post_date_color'];
						$post_num = $content['cb_recent_post_num'];
 ?>
 <div class="box index_recent_post">
  <div class="box_inner" style="background:#<?php echo esc_html($color); ?>;">
   <?php if(!empty($headline)) { ?>
   <h3 class="headline" style="color:#<?php echo esc_attr( $font_color ); ?>"><?php echo esc_html($headline); ?></h3>
   <?php }; ?>
   <div class="content">
    <?php
         $args = array('post_type' => 'post', 'posts_per_page' => $post_num, 'ignore_sticky_posts' => 1);
         $recent_post = new WP_Query($args);
    ?>
    <ol>
     <?php if ($recent_post->have_posts()) { while ($recent_post->have_posts()) : $recent_post->the_post(); ?>
     <li>
      <?php if($show_date == 1) { ?><p class="date" style="color:#<?php echo esc_html($date_color); ?>;"><?php the_time('Y.m.j'); ?></p><?php }; ?>
      <a class="title" href="<?php the_permalink() ?>" style="color:#<?php echo esc_attr( $font_color ); ?>"><?php trim_title(35); ?></a>
     </li>
     <?php endwhile; wp_reset_query(); } else { ?>
     <li><?php _e('There is no registered post.', 'tcd-w');  ?></li>
     <?php }; ?>
    </ol>
    <div class="link_button"><a href="<?php echo esc_url(get_permalink( get_option('page_for_posts') )); ?>" style="color:#<?php echo esc_attr( $font_color ); ?>"><?php echo esc_html($button); ?></a></div>
   </div><!-- END .content -->
  </div><!-- END .box_inner -->
 </div><!-- END .box -->

この部分に別のWordPress環境となったブログのRSSを読み込み、新着情報を成形する処理を加えます。

<?php get_header(); $options = get_desing_plus_option(); ?>

<?php // Content Builder -------------------------------------- ?>
<div class="box_list clearfix" id="index_contents">
 <div class="box-sizer"></div>
 <?php
			if (!empty($options['contents_builder'])) :
				foreach($options['contents_builder'] as $content) :

					// Recent Post --------------------------------------
					if ($content['cb_content_select'] == 'recent_post') {

						$headline = $content['cb_recent_post_headline'];
						$button = $content['cb_recent_post_button'];
						$color = $content['cb_recent_post_color'];
						$font_color = $content['cb_recent_post_font_color'];
						$show_date = $content['cb_recent_post_show_date'];
						$date_color = $content['cb_recent_post_date_color'];
						$post_num = $content['cb_recent_post_num'];
 ?>
 <div class="box index_recent_post">
  <div class="box_inner" style="background:#<?php echo esc_html($color); ?>;">
   <?php if(!empty($headline)) { ?>
   <h3 class="headline" style="color:#<?php echo esc_attr( $font_color ); ?>"><?php echo esc_html($headline); ?></h3>
   <?php }; ?>
   <div class="content">
    <?php
         //$args = array('post_type' => 'post', 'posts_per_page' => $post_num, 'ignore_sticky_posts' => 1);
         //$recent_post = new WP_Query($args);
         
		 // 取得するフィードのURLを指定
		 $url = "https://www.slashd.com/blog/feed" ;
		 // インスタンスの作成
		 $feed = new Feed ;
		 // RSSを読み込む
		 $rss = $feed->loadRss( $url ) ;
		 $roop = 0;
    ?>
    <ol>
     <?php 
	     foreach( $rss->item as $item ) {
		 $title = $item->title ;  
		 $link = $item->link ;  
		 $roop = $roop +1; 
		 
		 // 表示数
		 if( $roop > $post_num )
		 {
		 	break ;
		 }
	     
	     // 日付の取得(UNIX TIMESTAMP)
		 foreach( array( "pubDate" , "date_timestamp" , "dc:date" , "published" , "issued" ) as $time )
		 {
		 	if( isset( $item->{ $time } ) && !empty( $item->{ $time } ) )
		 	{
		 		$timestamp = ( is_int( $item->{ $time } ) ) ? $item->{ $time } : strtotime( $item->{ $time } ) ;
		 		break ;
      		}
		 }
 
		 // 仮に日付が取得できなかったら現在時刻
		 if( !isset( $timestamp ) )
		 {
		 	$timestamp = time() ;
		 }
	     
	     ?>
     <li>
      <?php if($show_date == 1) { ?><p class="date" style="color:#<?php echo esc_html($date_color); ?>;"><?php echo date( "Y.m.d" , $timestamp ); ?></p><?php }; ?>
      <a class="title" href="<?php echo esc_url($link) ?>" style="color:#<?php echo esc_attr( $font_color ); ?>"><?php echo $title; ?></a>
     </li>
     
     <?php } ?>
     <?php if ($roop = 0){ ?><li><?php _e('There is no registered post.', 'tcd-w');  ?></li><?php } ?>
    </ol>
    <div class="link_button"><a href="<?php echo esc_url(get_permalink( get_option('page_for_posts') )); ?>" style="color:#<?php echo esc_attr( $font_color ); ?>"><?php echo esc_html($button); ?></a></div>
   </div><!-- END .content -->
  </div><!-- END .box_inner -->
 </div><!-- END .box -->

日付の処理は様々なRSSに対応するよう汎用的に処理しています。

これで別テーマとなったブログの新着情報も表示出来るようになりました。

「rss-php」はキャッシュも組み込まれているので、ストレスなくブログの新着情報を表示することができました。
※WorgPressテーマTCD「unique」はもともと遅いテーマなので分かりにくいかもしれませんが…

参照 企画デザイン事務所 スラッシュディー(www.slashd.com)

by T.Y.

スポンサーリンク