ようこそのお運びで、厚く御礼申し上げます。
44日目です。今回は前回の公開時の場合分けをもうちょっと細かくしてみます。
記事を公開したとき、更新したときに、複数のアドレスにお知らせメールを送信する。
記事を更新したり、新規に公開したら、指定した複数のメールアドレスにお知らせメールを送信します。
前回とお枠の流れは変わりません。
- 記事を更新するときをフックする
※前回より細かく分ける - メールアドレスや本文を指定する
- メールを送信する
まずは、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」をアクションフックしています。前回のアクションフックの大本みたいなものなのかな。
(こちらのページを参照してください。)001add_action(
'transition_post_status'
,
array
(
$this
,
'publish_state'
), 10, 3);
- 公開時、状態の条件分岐をします。
001002003004005006
//現在の状態が「公開」で「一般記事」のとき
if
(
$new_status
==
'publish'
&&
$post_type
=
"post"
){
switch
(
$old_status
){
//前の状態をもとに条件分岐
}
}
- 「状態」については、WordPress Codexの日本語版にまとめてくれていますので、こちらを参照してください。こちらにそって、状態を設定しています。
メールの送信、こちらは「wp_mail」を使います。
- WordPressにはメール関数が用意されています。
送信先メールアドレスは配列で複数登録することもできます。001wp_mail(
$this
->mail_address,
$this
->subject,
$message
);
- その他header(ccやFrom等)の設定も変えれます。
(WordPress Codex:wp_mail参照)
コードをプラグイン用のファイルにします
それではfunction.phpに書いたコードを消して、
「paka3_postMail.php」というファイルを作成し、以下のコードを記入します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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とかにながせると面白いかも。