
前回「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」にはしないでください。(動作テスト用:アクセスする度にメールが送られます)
メール文章

$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