WordPress

定期的(1日おきに)にRSSを取得し、新しい記事を自動で投稿する。(wp_cron):【85日目】WordPress1日1プラグイン

更新日:

ようこそのお運びで、厚く御礼申し上げます。
85日目です。今回は、前回の応用でRSSで取得した記事を定期的に投稿してみたいと思います。

定期的(1日おきに)に、RSSを取得し、新しい記事を自動で投稿する。

今回は、前回の応用RSSを取得して、定期的に新しい記事を投稿するようにしていきます。

まずは、こちらの記事を参考にしてね

今回の仕様

  • RSSの「URL」と「処理を実行する時間」、取得した記事の「表示数」はコードで設定する。
  • 記事のタイトルも設定できるようにする
  • 一日おきに設定した時間に基づき、RSSを取得する。
  • そして新しい記事を投稿する。

画面の流れ

今回はコード内での処理なので、特にありません。
コード内に「URL」「処理を実行する時間」「表示数」「記事のタイトル」の設定
140530-0003

時間になるとRSSを取得して、新しい記事が作成されます(今回も下書き)
140530-0002-75%

プラグインファイルを作成する

今回は、直接プラグインファイルを作成してコードを書いていきます。
今回はfunctions.phpに直接書いても動きません。最後にコード全体を記載します。

「定期的に新しい記事を作成する」の流れは前回を参照。

まずは、「定期的に新しい記事を作成する」流れを復習。

こちらのコードをもとに作成して行きます

まずは、RSSを取得〜記事作成まで書いてみる

まずは上記のコードよりたりない関数を追加作成します。

RSSの取得する関数が足りないのでクラス内に関数を作成。
前々回に作成した関数「get_my_feed」が使えそうなのでこの関数を流用します。

コードはこちらを参照。
関数get_my_feedとreturn_1800をコピペします。

	//RSS取得の関数
	function get_my_feed ( $url, $count ) {

		//ここからfeedを取得して行きます。
		add_filter (  'wp_feed_cache_transient_lifetime' , array( $this , 'return_1800' ) );
		$feed = fetch_feed( $url );
		remove_filter( 'wp_feed_cache_transient_lifetime' , array( $this , 'return_1800' ) );

		//*表示数を設定
		if ( ! is_wp_error( $feed ) ) {
			$maxitems = $feed->get_item_quantity( $count );
			$rss_items = $feed->get_items( 0, $maxitems );
		}
		//サイト名とサイトURLの取得
		$title = $feed->get_title();
		$site_url = $feed->get_permalink();

		//表示数
		$str="";
		if ( $maxitems > 0){
			foreach ( $rss_items as $item ){
				$f_link = esc_url( $item->get_permalink() );
				$f_date = sprintf( __( '%s', 'my-text-domain' ), $item->get_date('j F Y | g:i a') );
				$f_title = esc_html( $item->get_title() );
				$f_content = mb_strimwidth(strip_tags($item->get_content()), 0, 140, "...","UTF-8");

				if(preg_match_all('/<img.*?src=(["\'])(.+?)\1.*?>/i',$item->get_content(),$img_array)){
							$site_img = $img_array[2][0];
				}
				if(!preg_match('/^http(s)?:\/\/[^\/\s]+(.*)$/',$site_img,$r)){
						$site_img = $site_url.$site_img;
				}

					//itemのhtmlの生成
				$str .= <<<EOS
				<div class="feed_item">
					<a href="{$f_link}" rel="nofollow" >
					 <div class=feed_item_img><img src = {$site_img} /></div>
							<h4>{$f_title}</h4>
							<p>{$f_content}</p>
						</a></div>
EOS;
			}
		}
		//全体の
		$html =<<< EOS
			<div class="feed_block">
			<h2><a href="{$site_url}" rel="nofollow" >{$title}</a></h2>
			{$str}
			</div>
EOS;
		return $html ;
	}

	function return_1800(){
		return 1800;
	}

スケジュールで「実行する処理」を書き換える

実行する関数「paka3_task_post_function」には、

  • 関数「get_my_feed」でRSSを取得
  • 新規投稿する関数「new_my_post」に渡し記事を作成

といった命令を書きます。

	//実行する処理
	function paka3_task_post_function() {
			$url = "http://www.en3.jp/feed";
			$count = 3;

			$title = "記事タイトル";
			$html = $this->get_my_feed( $url , $count );
			$newPost = array ('title' => $title,
												'content' => $html);

			$res = $this->new_my_post( $newPost, $catID );
	}

実行処理だけなら、ここで完成です。

とりあえず、コレだけでRSSの定期取得&投稿は完了です。

設定する値をわかりやすくしましょう。

設定する値「記事タイトル」「実行する時間」RSSの「URL」「表示数」をまとめたいので、インスタンス変数(メンバ変数)にしてしまいました。
(えっと、要はクラス内で使える変数と思ってください。)

	//インスタンス変数(設定)
	private $t = "13:00:00" ;
	private $title = "今日のオススメ記事" ;
	private $url = "http://www.en3.jp/feed" ;
	private $count = 3 ;

変数の呼び出しは、関数内では「$this->インスタンス変数」で変数を呼び出すことができます。

で、タスクを登録するところは以下のように書き換え。

		//管理>設定されたタイムゾーンでの時間を設定する(13:00)
		//$my_time = date( 'Y-m-d 13:00:00', current_time( 'timestamp' ) );
		$my_time = date( 'Y-m-d '.$this->t, current_time( 'timestamp' ) );

処理を実行する関数「paka3_task_post_function」では以下のように書き換え。

	//実行する処理
	function paka3_task_post_function() {
			$url = $this->url;
			$count = $this->count;

			$title = $this->title;

コードをプラグイン用のファイルにします

functions.phpに書いているかたは、こちらをプラグインファイルにします(任意)。
今回はプラグインディレクトリに「paka3_task_post_rss/paka3_task_post_rss.php」というディレクトリとファイルを作成しました。

このファイルを[wp-content]>「plugins」ディレクトリに入れ、管理画面で有効にして完了です。

今回のまとめ

ということで、ほとんど今までの使い回しで作成することができてしまいました。
あとは、管理画面から値を設定するとかいうカスタマイズも可能ですが、今回はここまでで。
お後がよろしいようで。

-WordPress
-, , , ,

Copyright© アルパカ@ラボ , 2024 All Rights Reserved Powered by AFFINGER5.