WordPressで記事を投稿したことをメールでお知らせしたい場合があります。また、メールを送信することで、IFTTTなどの外部サービスと連携し、即座にアクションを起こすことも可能となります。IFTTTとの連携については別記事でご紹介しますが、今回はWordPressで記事を投稿した際に、特定のメールアドレスに対してメールを送信する方法をご紹介します。
記事の投稿を契機にメールを送信する方法
記事を投稿した瞬間に外部へメールを送信するためのWordPressのプラグインは数多く存在しますが、今回はプラグインを使用せずに自前で用意してみたいと思います。
functions.phpの編集
実は、WordPressを使用すると簡単にメール送信できます。以下をfunctions.phpの末尾に追加してください。
add_action( 'transition_post_status', function( $new_status, $old_status, $post ) {
if ( 'publish' == $new_status && 'publish' != $old_status && 'post' == $post->post_type ) {
$header = array( 'From: from@example.com' );
wp_mail( 'to@example.com', $post->post_title, get_permalink( $post->ID ), $header );
}
}, 10, 3 );
WordPressにはアクションフックと呼ばれる機能が存在します。アクションフックは、デフォルトで数多く定義されている他、自由にカスタマイズすることもできます。今回は、デフォルトで用意されているアクションフックを使用します。
transition_post_statusは、/wp-includes/post.phpの中で定義されているアクションフックです。このアクションフックは、文字通り、投稿した記事やページの「ステータス」が変化した場合に呼び出されます。transition_post_statusのアクションフックに指定する関数には、3つの引数を渡すことができます。
| 変数 | 内容 |
|---|---|
| $new_status | 投稿した記事やページの変更後のステータス |
| $old_status | 投稿した記事やページの変更前のステータス |
| $post | WP Postオブジェクト |
$new_status、$old_statusは記事やページのステータスを管理できます。2種類のステータスを併用することで、たとえば「下書き」の状態から「公開済み」になった場合のみアクションフックを呼び出すことができます。記事のステータスの詳細については以下のURLを参照してください。
$postは、WP Postオブジェクトが格納されています。記事の一意のIDやタイトル、投稿者名、記事のタイプ(投稿、ページなど)、投稿日時、最終更新日時などを取得できます。取得可能な情報については以下のURLを参照してください。
https://codex.wordpress.org/Class_Reference/WP_Post
今回は、投稿された記事が「公開済み」に変更された場合のみメール通知する機能を実装します。なお、「公開済み」から「下書き」に戻した後、再度「公開済み」に変更した場合も適用されますので注意してください。また、固定ページは除外し、「記事」(post)のみを通知の対象とします。
WordPressでメールを送信するためには、wp_mail関数を使用します。wp_mail関数の詳細については以下のURLを参照してください。
https://developer.wordpress.org/reference/functions/wp_mail/
wp_mail関数は以下の引数を指定できます。
| 変数 | 内容 |
|---|---|
| $to | 必須。送信先メールアドレス。文字列型、または配列型で複数のメールアドレスを指定可能 |
| $subject | 必須。件名。文字列型 |
| $message | 必須。本文。文字列型 |
| $headers | オプション。ヘッダー。文字列型、または配列型で複数のヘッダーを指定可能 |
| $attachments | オプション。添付ファイル。文字列型、または配列型で複数の添付ファイルを指定可能 |
指定できるメールアドレスやヘッダーは、RFC 2822 - Internet Message Format (RFC2822)に準拠しています。
今回は、メールの送信元、送信先、件名、本文のみを指定します。メールの送信元はヘッダーで指定する必要があります。指定方法は以下の通りです。:を忘れないように注意してください。
$header = array( 'From: from@example.com' );
また、件名に記事のタイトル($post->post_title)を指定しました。本文には記事のパーマリンクを指定します。パーマリンクは、WP Postオブジェクトから直接取得することはできません。そのため、get_permalink関数を使用して、投稿のID($post->ID)を引数としてパーマリンクを取得しています。
以上で、メールを送信する準備は完了です。
まとめ
アクションフックを使用することで、記事のステータスが変化した場合に特定のアクションを起こすことが可能です。今回は、もっとも使用されるであろう「公開済み」になった場合のみアクションを起こすようにしましたが、さまざまなステータスに応用できます。たとえば、複数の投稿者がいる場合に、記事の状態が「承認待ち」になれば管理者に通知するといった使用方法も可能でしょう。
次回は、このアクションフックを使用して、記事が公開されると同時に各種SNSで簡単にシェアする方法をご紹介したいと思います。