WordPressで投稿をする時、自動的に予約投稿に切り替える①

WordPressで新規投稿をする際、現在公開中or公開予約をしている記事の中で一番未来の日付を取得して、その○分後の投稿として自動で予約をしてくれるプログラムを作成しました!

例えば、ゴールデンウィークなどの大型連休中、毎日記事を投稿したいけど、記事自体は連休前に全部書き切りたいって場合がありますよね。

そんな時に活躍するのがWordpressに標準で用意された予約投稿機能です。
これは非常に便利ですが、投稿日時を指定するのがめんどくさいって時がありませんか?(僕がものぐさ過ぎる説)

そこで、「新規投稿する度に一日おきの日付で予約投稿してね」などと指定できるのがこのプラグインです。

完成するプラグインの動き

MEMO

最新の投稿が古い場合はそのまま公開される。

MEMO

連続して投稿すると予約投稿扱いになります。

MEMO

設定時間は1446分(テストの為、中途半端な時間設定にしてあります)

需要があるかは分かりませんがソースコード貼り付けますので、誰でもコピペで簡単に実装できますよ。

それでは見ていきましょう!

大まかな手順

  • 適当な名前のフォルダを作る
  • 作ったフォルダ直下にphpファイルを作成
  • phpファイルにプログラムを記述していく
  • 出来上がったらFTPソフトでサーバーにアップロード
  • WordPressでプラグインを有効化

以上の流れで進めていきます。

適当な名前のフォルダを作る

これはプログラムをプラグインとして認識させる為のフォルダになります。

ローカルのどこでもいいので、作成しましょう。

僕は「FPtimer」というフォルダ名にしました。Future Post timerです。安直なネーミングですね(笑)

作ったフォルダ直下にphpファイルを作成

拡張子が.phpで、変な名前でなければ何でもいいので、とりあえず作成します。

よく分からない人は、テーマフォルダあたりを見てもらえばphpファイルが必ずあるはずですので、そこからコピーして名前を変更して下さい。
その後、ファイルを開いて中身を空にします。

僕は「fp_timer.php」と名付けました。安直な(略

phpファイルにプログラムを記述していく

まずは下のコードをコピペしましょう。

<?php
/*
Plugin Name: FPtimer
Description: 投稿を行うと自動的に指定間隔をあけた予約投稿に変更します。
Version: 1.0
*/

これは、「このファイルはプラグインですよ」とWordpressに教えてあげるおまじないですので、特に深く考えずにコピペでOKです。

続いて、このプラグインの本体になるプログラム部分です。

function fp_timer() {

	global $post;
	$post_id = $post->ID;

	global $wpdb;
	$sql = "SELECT post_date FROM $wpdb->posts ORDER BY `post_date` DESC LIMIT 1";
	$lastTime = $wpdb->get_var( $sql );//DBから最新の投稿の日付を取得

	if ($post_id) {

		$publish_date = date( 'Y-m-d H:i:s', strtotime( '+1440 minute', strtotime( $lastTime ) ) );//+○ minute部を任意の値に変更できます。
		$now = new DateTime( null,new DateTimeZone( 'Asia/Tokyo' ) );

		if($publish_date < $now->format( 'Y-m-d H:i:s' )){

			$ft_post['ID'] = $post_id; 
			$ft_post['post_status'] = 'publish';

			wp_update_post( $ft_post );//投稿ステータスを公開済みに

		} else {
			$ft_post['ID'] = $post_id; 
			$ft_post['post_status'] = 'future';
			$ft_post['post_date'] = $publish_date;
			$ft_post['edit_date'] = 'true';

			wp_update_post( $ft_post );//投稿ステータスを予約投稿に

		}
	}
}
add_action( 'admin_head-post-new.php', 'fp_timer' );//投稿ボタンにフック

以上を追加してphpファイルは完成です!

コード中にコメントで説明がありますが、さらっと解説

まずはadd_actionでアクションフックを追加しています。第一引数にadmin_head-post-new.phpを指定することで、投稿ボタンを押した時に動作させられます。

実行させる動作は、まずglobal変数$postから投稿IDを拾います。その後、global変数$wpdbでSQL文を実行し、データベース内の記事情報を投稿日時順でソートしています。

get_var()で最新の記事の日付を変数に代入し、strtotime()でタイムスタンプ形式に変換しつつ任意の時間をプラスし、現在時刻と比較します。

現在時刻の方が新しければそのまま記事を公開し、そうでなければwp_update_post()を使い、上乗せした日時で予約投稿に切り替えるといった流れです。

出来上がったらFTPソフトでサーバーにアップロード

WordPressを利用している方であれば、サーバーへのアップロードは問題ないかと思いますのでざっくりと。

手順1で作成したフォルダを、プラグインフォルダにアップロードします。

場所はWordpressインストールディレクトリ内wp-content/plugins直下です。

WordPressでプラグインを有効化

ファイルのアップロードができたら、管理画面のプラグイン一覧ページを開いてみて下さい。

FPtimerという名前のプラグインがあるはずです。それを有効化してみましょう。

これで全て完了となります、お疲れ様でした。

プラグインが有効化されている間、冒頭で書いたような挙動をすると思います。

ものすごく地味に便利ですので、是非使ってみて下さい!

次回はこのプラグインに設定ページを追加してみたいと思います。

設定ページ追加編、書きました!

WordPressで投稿をする時、自動的に予約投稿に切り替える②

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です