WordPressで記事を投稿した瞬間に外部にメールを送信する方法

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を参照してください。

https://wpdocs.osdn.jp/%E6%8A%95%E7%A8%BF%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%81%AE%E9%81%B7%E7%A7%BB

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

comments powered by Disqus