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で簡単にシェアする方法をご紹介したいと思います。