WordPress 長い間、投稿していないユーザー(管理者、編集者、投稿者)にメールを送る

main_sendemail1
前回「WordPress ユーザーごとに投稿数を制限する」という投稿を抑制する記事を書きましたが 今回は、長い間 投稿していないユーザー(管理者、編集者、投稿者)ごとに投稿を促すメールを送る方法をご紹介します。
特に自分用にプレッシャーをかけるには いいツールだと思いますよ。

 

コード

以下のコードを my-plugin.php に張り付けてください。

if ( !class_exists( 'Nendebcom_Lazy_Post_Sent_Warning_Mail' ) ):
/*
 * 長い間、投稿していないユーザーにメールを送る
 * 
 * @package WordPress4.3
 *
 * License: GPLv2 or later
 */
class Nendebcom_Lazy_Post_Sent_Warning_Mail {

	private $days_from_last_post	 = 7; //最後の投稿からの日数
	private $days_interval_check	 = 1; //チェックする間隔(日数) 0はNG

	public function __construct() {
		add_action( 'init', array( $this, 'nendebcom_lazy_post_sent_warning_mail' ) );
	}

	public function nendebcom_lazy_post_sent_warning_mail() {

		global $wpdb;

		//経過日判定用日時
		$check_date_last_post = date( "Y-m-d H:i:s", strtotime( date_i18n( "Y-m-d H:i:s" ) . "-{$this->days_from_last_post} day" ) );

		//チェックする日時
		$check_date = date( "Y-m-d H:i:s", strtotime( date_i18n( "Y-m-d H:i:s" ) . "-{$this->days_interval_check} day" ) );

		//チェックした日時
		$checkd_date = get_option( 'nendebcom_lazy_post_check_date' ) ? get_option( 'nendebcom_lazy_post_check_date' ) : $check_date;

		if ( $checkd_date <= $check_date ) {

			//全ユーザーリスト取得
			$users = get_users();

			foreach ( $users as $user ) {

				$user_id	= $user->ID;
				$user_name	= $user->user_login;
				$user_email	= $user->user_email;

				//公開権限があるユーザーのみ
				if ( isset( $user->allcaps[ 'publish_posts' ] ) && $user->allcaps[ 'publish_posts' ] ) {

					$sql  = "SELECT P.ID, P.post_date";
					$sql .= " FROM $wpdb->posts AS P";
					$sql .= " WHERE P.post_type ='post'";
					$sql .= " AND P.post_status ='publish'"; //公開済み 
					$sql .= " AND P.post_author = %d";
					$sql .= " ORDER BY P.post_date DESC";
					$sql .= " LIMIT 1";
					$sql	= $wpdb->prepare( $sql, $user_id );
					$meta	= $wpdb->get_row( $sql );

					if ( !empty( $meta ) ) {

						$post_id	= $meta->ID;
						$post_date	= $meta->post_date;

						//最後の投稿が 経過日判定用日時 以前の場合
						if ( $post_date <= $check_date_last_post ) {

							//mail subject
							$subject = '長い間、投稿をしておりません';

							//mail body
							$message  = "";
							$message .= "こんにちは " . $user_name . " さん\r\n";
							$message .= "あなたは " . date_i18n( get_option( 'date_format' ), strtotime( $post_date ) ) . " 以降、投稿をしておりません。\r\n";
							$message .= "がんばって記事を投稿しましょう。\r\n";
							$message .= "\r\n";
							$message .= "最終投稿\r\n";
							$message .= get_the_title( $post_id ) . "\r\n";  //タイトル
							$message .= get_permalink( $post_id ) . "\r\n";  //URL

							//send mail
							@wp_mail( $user_email, $subject, $message );
						}
					}
				}
			}

			//チェックした日時更新
			update_option( 'nendebcom_lazy_post_check_date', date_i18n( "Y-m-d H:i:s" ) );
			//キャッシュも更新
			wp_cache_set( 'nendebcom_lazy_post_check_date', date_i18n( "Y-m-d H:i:s" ), 'options' ); 

		} //checkd_date
	}

} //class end

new Nendebcom_Lazy_Post_Sent_Warning_Mail();

endif;

 

初期値

以下の値を利用する環境にあわせて変更してください。

最後の投稿からの日数

	private $days_from_last_post	 = 7; //最後の投稿からの日数

最後に投稿してから何日後にメール送信を開始するかを設定します。

チェックする間隔

	private $days_interval_check	 = 1; //チェックする間隔(日数)

チェックする間隔(日数)を設定します。
「1」にすると対象のユーザーは毎日メールが来るようになります。「2」にすると2日おきに送られます。
*「0」にはしないでください。(動作テスト用:アクセスする度にメールが送られます)

メール文章

lazy_post_mail-1
$subject、$message の内容も変更してみてください。やんわりな内容でも、きつい内容でもご自由にどうぞ。
*メール本文内では「\r\n」を入れると改行になります。

 



 

おまけ

配信されるメールの From はこのままでは 「”WordPress” <wordpress@ドメイン>」になります。 ちゃんと From を変更したい場合は wp_mail の第4引数に $headers を追加するといいです。

//header mail
$headers = 'From: My Name <myname@example.jp>' . "\r\n";
//send mail
@wp_mail( $user_email, $subject, $message, $headers );

「My Name」と「myname@example.jp」の所を設定してください。
*メールアドレスの @以降のドメインはサイトのドメイン以外にすると うまく届かない場合があります。
 

もしユーザーがたくさん登録されていると 配信するメールが大量になり、動作が遅くなったりメール配信が不安定になる場合は、サーバーCronで動作するように改造して さらにメール配信1通ごとにインターバルを置くと改善されるかもしれません。

 
 

参考

WordPress Codex 関数リファレンス/get option
http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_option

WordPress Codex Function Reference/update option
https://codex.wordpress.org/Function_Reference/update_option

WordPress Codex 関数リファレンス/date i18n
http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/date_i18n

WordPress Codex 関数リファレンス/wp mail
http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_mail

WordPress Codex 関数リファレンス/get users
http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_users

WordPress Codex 関数リファレンス/get the title
http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_the_title

WordPress Codex テンプレートタグ/get permalink
http://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_permalink

WordPress Codex Function Reference/wp cache set
https://codex.wordpress.org/Function_Reference/wp_cache_set