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

投稿ステータスの遷移 – WordPress Codex 日本語版

注意: アクションフック transition_post_status と、関数 wp_transition_post_status() / en またはプライベート関数 _transition_post_status() / en を混同しないでください。関数 wp_transition_post_status() は投稿ステータスの変化時にアクションを呼び出すために使用され、wp-includes/post.php にあります。この関数は、プラグインが直接データベースを変更したい場合に役立ちます(その場合、普通の投稿ステータス変化に関するアクションフックをバイパスします)。もし投稿ステータスの変化時にアクションを実行するのでなく、投稿のステータスを変えたい場合は、 wp_update_post() または wp_publish_post() を使用してください。

$postは、WP Postオブジェクトが格納されています。記事の一意のIDやタイトル、投稿者名、記事のタイプ(投稿、ページなど)、投稿日時、最終更新日時などを取得することが可能です。取得可能な情報については以下のURLを参照してください。

Class Reference/WP Post ” WordPress Codex

Please Note: While the above method is fine for retrieving the post ID, you should not use the above method for displaying post_content and other filtered elements (such as post_title).

今回は、投稿された記事が「公開済み」に変更された場合のみメール通知する機能を実装します。なお、「公開済み」から「下書き」に戻した後に、再度「公開済み」に変更した場合も適用されますので注意してください。また、固定ページは除外し、「記事」(post)のみを通知の対象とします。

WordPressでメールを送信するためには、wp_mail関数を使用します。wp_mail関数の詳細については以下のURLを参照してください。

wp_mail() | Function | WordPress Developer Resources

A true return value does not automatically mean that the user received the email successfully. It just only means that the method used was able to process the request without any errors. Using the two ‘wp_mail_from’ and ‘wp_mail_from_name’ hooks allow from creating a from address like ‘Name email@address.com ‘ when both are set.

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

この記事が気に入ったら
いいね ! しよう

Twitter で