追加した投稿タイプも含め、公開時に自動でサイトのメールアドレスへ通知する方法

公開日:2023(令和5)年9月30日/最終更新日:

WordPress Customize Ideas | Personal WP Customization Notes (PWCN)

サイトの維持や有用なページの紹介を目的として、このページには各所に広告を表示しています。多数の広告が表示され、閲覧しにくいところがあるかも知れませんが、ご協力いただけますようお願いいたします。

以前に公開した以下のページでは、「投稿」という投稿タイプで、状態が「公開」以外から「公開」となった場合にサイトのメールアドレス宛に通知メールが送信されるというものでした。

通常のサイトでは、何かを一般に公開できるのは「投稿」と「固定ページ」だけで、頻繁に公開という作業が行われるのは「投稿」なので、リンク先ページのコードで事足りると思います。

ただ、サイトにカスタム投稿タイプを追加して、追加したカスタム投稿タイプ上で状態が「公開」となっても通知メールは送信されません。

これは、ジャンルをカスタム投稿タイプで分けているようなサイトではすべてを把握できないため不都合に感じるかも知れません。

そこで今回は、上記のページで紹介したコードをさらにカスタマイズして、「投稿」「固定ページ」「追加したカスタム投稿タイプ」すべてで状態が「公開」に変更された場合にメールを送る方法を紹介します。

ひょっとしたらもっとスマートな方法があるかも知れませんので参考程度にお読みください

コードを使用する前に、ここをクリックして注意事項をご確認ください

本ページで掲載しているコードは、以下に了承した上で使用ください

  • コードは商用・非商用問わず自由に使っていただいて構いませんが、コード追加による不具合やトラブルが発生しても当方では一切責任を負いません
  • コードは有効化しているテーマのfunctions.php、style.cssなどへ追加することで機能します。それらのファイルへの変更を行うことに不安のある方は使用しないでください
  • コードは本ページの公開日時点で私の環境において動作したものです。WordPressバージョン他環境の違いによって動作しないことがあります
  • コードは、セキュリティ、コードの正確さなどにおいて完全なものではありません。中には紹介するコードを簡略化するために省略している部分があるものもありますので、ご自身でコードを十分に検証し、必要な部分の編集を行った上で使用するようにしてください
  • 掲載しているのは参考コードです。自身の環境に合わせるための編集はご自身で対応いただく必要があります(コメント欄等から質問いただいても基本回答は致しません)
  • 掲載しているコードの転載を禁じます(SNSで紹介いただいたり、本ページへのリンクを張っていただくことは大歓迎です)

すべての投稿タイプでステータスが「公開」になった時に自動でメール通知をするためのコード

まずは完成コードから。コードの後に解説をしていきます。

if ( !function_exists( 'sample_post_pubulished_send_email' ) ){
function sample_post_pubulished_send_email($new_status, $old_status, $post_id){

//投稿や固定ページと同じ機能を持つ投稿タイプを$post_typesへ代入
	$post_types = get_post_types_by_support(array('title', 'editor', 'thumbnail'));

//$post_typeで公開になっていない投稿タイプを除外して$post_keyに代入し直す
	foreach ($post_types as $post_spec => $post_type) {
		if (!is_post_type_viewable($post_type)) {
			unset($post_types[$post_type]);
		}
	}

//$post_keyに合致する投稿タイプに対してコールバック関数の列を並び替え可能にする
	foreach ($post_types as $post_spec) {
		if ( $new_status == 'publish' && $old_status !='publish'  && $post_id->post_type == $post_spec) {
			$to = get_option('admin_email');//送信先(サイトメールアドレス)
			$post_url = get_permalink( $post_id );//投稿のURL
			$post_title = get_the_title($post_id);//投稿タイトル
			$author_ID = $post_id->post_author;//投稿者のID
			$author_name = get_the_author_meta('nickname',$author_ID);//投稿者のIDからニックネームを取得
			$subject = __('Post publish notification','');//メールの件名
			$headers = array('Content-Type: text/plain; charset=UTF-8');//ヘッダー情報

			$title_text = __('Post Published','');
			$posttitle_text = __('Post Title:','');
			$posturl_text = __('Post URL:','');
			$post_author_text = __('Author:','');

			$message  = <<<EOF
			$title_text

			$posttitle_text $post_title
			$posturl_text $post_url
			$post_author_text $author_name

			EOF;

			wp_mail($to, $subject, $message, $headers, array( '' )  );  
		}
	}

}
}
add_action( 'transition_post_status', 'sample_post_pubulished_send_email', 10, 3);

冒頭のリンク先ページにあるコードと比較しながら見るとわかりやすいと思います

「transition_post_status」にフックさせて、公開以外の状態から公開となった場合にメールを送信するという基礎となるコード自体は変わりません。

相違点は以下の部分です。

  1. 「get_post_types_by_support」関数を使って、「title」「editor」「thumbnail」というサポートが有効な投稿タイプをすべて抽出する
  2. 念のため、「is_post_type_viewable」関数を使って、フロントエンド表示可能な投稿タイプ以外を除外して(プラグインなどがバックエンド用に生成する投稿タイプやパターンなどを除外)投稿タイプ分だけ抽出を繰り返す
  3. 繰り返して抽出した投稿タイプ分だけ、メール生成の処理を繰り返す

自身のサイトでカスタマイズする際は十分にテストを行ってくださいね。

, , , , , , , , , ,
Lolipop ServerMoshimo Ad x-serverMoshimo Ad

WordPress Customize Ideas | Personal WP Customization Notes (PWCN)
functions.phpからセキュリティヘッダーを追加する方法(例)