前回「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