テーマフォルダの functions.php に以下のようなコードを追加すれば OK◎
<?php
add_action( 'comment_post', 'my_notify_commenters', 10, 2 );
function my_notify_commenters( $comment_id, $comment_approved ) {
$comment = get_comment( $comment_id );
$post = get_post( $comment->comment_post_ID );
global $wpdb;
$email_bcc = $wpdb->get_col( $wpdb->prepare(
"SELECT DISTINCT comment_author_email FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved = '1' ORDER BY comment_date",
$post->ID
));
if ( 1 < count( $email_bcc ) ) {
$email_bcc = array_diff( $email_bcc, array( $comment->comment_author_email ) );
$author = $comment->comment_author;
$blogname = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
$subject = sprintf( '【%1$s】%2$sが「%3$s」にコメント', $blogname, $author, $post->post_title );
$message = sprintf( '%1$s が「%2$s」にコメントしました。', $author, $post->post_title ) . "\r\n\r\n";
$message .= get_comment_link( $comment_id ) . "\r\n\r\n";
$message .= 'コメント: ' . "\r\n" . strip_tags( $comment->comment_content ) . "\r\n--\r\n";
$headers[] = sprintf( 'From: "%1$s" <%2$s>', $blogname, get_site_option( 'admin_email' ) );
$headers[] = sprintf( 'Bcc: %1$s', implode( ',', $email_bcc ) );
@wp_mail( '', $subject, $message, implode( "\n", $headers ) );
}
}
※会員制ってことで承認関連の処理はイランだろーなと判断して省いてますー
Kz様
わざわざプログラムまで書いていただき誠にありがとうございます!
早速試してみた所、問題なく動作し、理想としていた機能を実装することが出来ました。
本当にありがとう御座いました。
感謝。
度々失礼いたします。
通知メールの差出人欄を見た所、下記のように文字化けしていたため、
ブログ名 <�������NONE��@example.com>
sprintf( ‘From: “%1$s” <%2$s>’, $blogname, get_site_option( ‘admin_email’ ) );
の行で直接メールアドレスを呼び出す処理などを行いましたが、そもそもフォーマットが上記から変わりませんでした。
$header[]に代入している「From」が認識されていないようですが、再度ご教授いただけると幸いです。
宜しくお願いいたします。
直接メールアドレスを呼び出す処理など
メールアドレスを仮に wp@example.com だとして:
$headers[] = sprintf( 'From: "%1$s" <%2$s>', $blogname, 'wp@example.com' );
でも化けますか?
#ロジックの問題ではないです
Kz様
早速のご回答ありがとう御座います。
上記のソースをそのまま追加した所、文字化けはしないのですが、
受信メールの差出人を見ると、ソースに直接指定したwp@example.comではなく、noreply@hogehoge.com(hogehoge.comはサーバのドメインです)となってしまいます。
このnoreply@hogehoge.comというのはそもそも管理者用アドレスが
登録されていないということでしょうか?
(WPの管理画面の「設定→一般設定」のメールアドレスの項目には既に
任意のアドレスを登録しております)
ウチではちゃんと「wp@example.com」に偽装して送信されますー
サーバーの偉い人の出現に期待。
Kz様
ということはサーバ側の設定に問題がありそうですね。
因みに使っているレンタルサーバはさくらインターネットになります。
nobita様
情報ありがとう御座います。
やはりアドレスは変わらないようです。
前述の通り、さくらのサーバですので、noreply@hogehoge.sakura.ne.jpとなります。
これは送信前にさくら側のサーバで偽装を防ぐために処理しているものなのでしょうか?
nobita様
またまたお調べいただきましてありがとうございます。
ここの記載されているように、さくらでメールアドレスを新たに作成し、
そのアドレスを下記に指定しましたが、やはりnoreply@example.sakura.ne.jpになってしまいます。
$headers[] = sprintf( ‘From: “%1$s” <%2$s>’, $blogname, ‘test@example.sakura.ne.jp’ );
遅れて相談なのですが。
ユーザーが投稿して管理者が確認コメントすると通知が行われません。一度、返信するとその後は理想的な動きになることは確認させていただいております。
初めのコメントへのメール通知が送れるようにしたいのですがご返信願いませんでしょうか?
管理画面の設定はコメントを受け付けるようにしていると2重にメールが送られるのでチェックを外してあります。
そうしてfinctionへ上記のコードを設定するとメール通知が行われておりますが初めのコメントへ通知されません。
何卒、ご返答願いませんでしょうか?