WordPress

投稿時に複数のアドレスにお知らせメールを送信する。その2:【44日目】WordPress1日1プラグイン

更新日:

ようこそのお運びで、厚く御礼申し上げます。
44日目です。今回は前回の公開時の場合分けをもうちょっと細かくしてみます。

記事を公開したとき、更新したときに、複数のアドレスにお知らせメールを送信する。

記事を更新したり、新規に公開したら、指定した複数のメールアドレスにお知らせメールを送信します

前回とお枠の流れは変わりません。

  1. 記事を更新するときをフックする
    ※前回より細かく分ける
  2. メールアドレスや本文を指定する
  3. メールを送信する

まずは、function.phpに書いてみます。

では、function.phpに以下のコードを書きました。

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
//オブジェクトを生成
new Paka3PostPublishMail;
 
//クラス定義
class Paka3PostPublishMail{
        public function __construct(){
    $this->mail_address =array('*****@***.com',
             '***@**.jp');
    $this->subject = "パカラボブログ更新のお知らせ";
    add_action('transition_post_status', array($this,'publish_state'), 10, 3);
  }
 
  public function publish_state($new_status, $old_status, $post){
  //公開時_一般記事のとき
     if($new_status == 'publish' && $post_type="post"){
    switch($old_status){
      case "new":     //新規
      case "draft":   //下書き
      case "auto-draft": //コンテンツなし
      case "future":     //予約
              $str = "ブログ記事が公開されました";
      break;
      case "publish":
        $str ="ブログ記事が更新されました";
      break;
      case "pending": //レビュー待ち
        $str ="レビュー待ちのブログ記事が公開されました";
      break;
      case "private":
              $str = "ブログ記事が非公開->公開されました";
      break;
      case "trash":
        $str = "ブログ記事がゴミ箱->公開されました";
      break;
    }
    $this->paka3sendMail($post,$str);
      }
 
  }
  //新規公開時のメール
  public function paka3sendMail($post,$str){
    $content = $post->post_title;
    $link = get_permalink($post->ID);
    $message =<<<EOS
アルパカラボです。
{$str}
※今回のタイトル
「{$content}」
{$link}
EOS;
    wp_mail( $this->mail_address, $this->subject, $message );
  }
}

ポイントはどこ?

今回はクラスを作ってますので。そのクラス構成

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
/オブジェクトを生成
new Paka3PostPublishMail;
 
//クラス定義
class Paka3PostPublishMail{
        public function __construct(){
    //メールアドレス・件名等の初期設定
    //アクション「transition_post_status」フック
  }
 
  public function publish_state($new_status, $old_status, $post){
    //公開時_一般記事のときの場合分け
    //場合分け後メール送信の関数へ
      }
  }
 
  public function paka3sendMail($post,$str){
    //メール送信の関数
  }
}

今回のポイント。まず一つは更新時の場合分けです。

  • 今回は「transition_post_statust」をアクションフックしています。前回のアクションフックの大本みたいなものなのかな。
    こちらのページを参照してください。

    001
    add_action('transition_post_status', array($this,'publish_state'), 10, 3);
  • 公開時、状態の条件分岐をします。
    001
    002
    003
    004
    005
    006
    //現在の状態が「公開」で「一般記事」のとき
    if($new_status == 'publish' && $post_type="post"){
        switch($old_status){
          //前の状態をもとに条件分岐
        }
    }
  • 「状態」については、WordPress Codexの日本語版にまとめてくれていますので、こちらを参照してください。こちらにそって、状態を設定しています。

メールの送信、こちらは「wp_mail」を使います。

  • WordPressにはメール関数が用意されています。
    送信先メールアドレスは配列で複数登録することもできます。

    001
    wp_mail( $this->mail_address, $this->subject, $message );
  • その他header(ccやFrom等)の設定も変えれます。
    WordPress Codex:wp_mail参照

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

それではfunction.phpに書いたコードを消して、
paka3_postMail.php」というファイルを作成し、以下のコードを記入します。

<?php
/*
Plugin Name: Paka3PostPublishMail
Plugin URI: http://www.paka3.com/wpplugin
Description: 記事を公開したとき、更新したときに、複数のアドレスにお知らせメールを送信する
Author: Shoji ENDO
Version: 0.1
Author URI:http://www.paka3.com/
*/
//オブジェクトを生成
new Paka3PostPublishMail;
//クラス定義
class Paka3PostPublishMail{
public function __construct(){
$this->mail_address =array('****@***.com',
'***@**.jp');
$this->subject = "パカラボブログ更新のお知らせ";
add_action('transition_post_status', array($this,'publish_state'), 10, 3);
}
public function publish_state($new_status, $old_status, $post){
//公開時_一般記事のとき
if($new_status == 'publish' && $post_type="post"){
switch($old_status){
case "new": //新規
case "draft": //下書き
case "auto-draft": //コンテンツなし
case "future": //予約
$str = "ブログ記事が公開されました";
break;
case "publish":
$str ="ブログ記事が更新されました";
break;
case "pending": //レビュー待ち
$str ="レビュー待ちのブログ記事が公開されました";
break;
case "private":
$str = "ブログ記事が非公開->公開されました";
break;
case "trash":
$str = "ブログ記事がゴミ箱->公開されました";
break;
}
$this->paka3sendMail($post,$str);
}
}
//新規公開時のメール
public function paka3sendMail($post,$str){
$content = $post->post_title;
$link = get_permalink($post->ID);
$message =<<<EOS
アルパカラボです。
{$str}
※今回のタイトル
「{$content}」
{$link}
EOS;
wp_mail( $this->mail_address, $this->subject, $message );
}
}
?>

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

今回のまとめ

メ公開時・更新時のアクションを取得できるということは、これからどんなふうに使うことができるか考えれるので結構面白いですね。TwitterだけじゃなくLINEとかにながせると面白いかも。

-WordPress
-, , ,

S