サポート » 使い方全般 » コメントが書かれる都度、コメントを記載したユーザにメール通知

  • jmzkw

    (@jmzkw)


    おはようございます。

    WordPressを会員制WEBとして動かしており、サイト運営側が作成した記事に
    登録済みのユーザがコメントを記載できるような仕組みにしております。

    そこで、コメントが書かれたら、その記事にコメントを書いたユーザ全員に対して
    メールで通知をしたいのですが、そのような機能を実装することは可能でしょうか?
    実現できるのであれば、プラグインなどでも結構です。

    例)
    1. 記事にAさんがコメント
    2. 記事にBさんがコメント → コメントが書かれた旨をAさんにメール通知
    3. 記事にCさんがコメント → コメントが書かれた旨をAさん、Bさんにメール通知

    イメージとしましては、Facebookの自分のフィードでやり取りした場合にコメントが入る
    都度、フィードにコメントしたユーザに対してメール通知されるような動作です。

    宜しくお願いいたします。

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • kz

    (@kz)

    テーマフォルダの 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 ) );
      }
    }

    ※会員制ってことで承認関連の処理はイランだろーなと判断して省いてますー

    jmzkw

    (@jmzkw)

    Kz様

    わざわざプログラムまで書いていただき誠にありがとうございます!
    早速試してみた所、問題なく動作し、理想としていた機能を実装することが出来ました。

    本当にありがとう御座いました。

    感謝。

    jmzkw

    (@jmzkw)

    度々失礼いたします。
    通知メールの差出人欄を見た所、下記のように文字化けしていたため、

    ブログ名 <�������NONE��@example.com>

    sprintf( ‘From: “%1$s” <%2$s>’, $blogname, get_site_option( ‘admin_email’ ) );
    の行で直接メールアドレスを呼び出す処理などを行いましたが、そもそもフォーマットが上記から変わりませんでした。

    $header[]に代入している「From」が認識されていないようですが、再度ご教授いただけると幸いです。

    宜しくお願いいたします。

    kz

    (@kz)

    直接メールアドレスを呼び出す処理など

    メールアドレスを仮に wp@example.com だとして:
    $headers[] = sprintf( 'From: "%1$s" <%2$s>', $blogname, 'wp@example.com' );
    でも化けますか?

    #ロジックの問題ではないです

    jmzkw

    (@jmzkw)

    Kz様

    早速のご回答ありがとう御座います。

    上記のソースをそのまま追加した所、文字化けはしないのですが、
    受信メールの差出人を見ると、ソースに直接指定したwp@example.comではなく、noreply@hogehoge.com(hogehoge.comはサーバのドメインです)となってしまいます。

    このnoreply@hogehoge.comというのはそもそも管理者用アドレスが
    登録されていないということでしょうか?

    (WPの管理画面の「設定→一般設定」のメールアドレスの項目には既に
    任意のアドレスを登録しております)

    kz

    (@kz)

    ウチではちゃんと「wp@example.com」に偽装して送信されますー

    サーバーの偉い人の出現に期待。

    jmzkw

    (@jmzkw)

    Kz様

    ということはサーバ側の設定に問題がありそうですね。
    因みに使っているレンタルサーバはさくらインターネットになります。

    nobita

    (@nobita)

    こんにちは

    お役に立つかわかりませんが、

    We Change wordpress@sitename.com

    jmzkw

    (@jmzkw)

    nobita様

    情報ありがとう御座います。

    やはりアドレスは変わらないようです。
    前述の通り、さくらのサーバですので、noreply@hogehoge.sakura.ne.jpとなります。

    これは送信前にさくら側のサーバで偽装を防ぐために処理しているものなのでしょうか?

    nobita

    (@nobita)

    こんにちは
    お手数かけました。
    行き当たりばったりで、失礼だとは思いますが、こんなの見つかりました
    http://sakura.cb-faq.com/faq/public/app/servlet/relatedqa?QID=000097
    は設定済みですか?

    jmzkw

    (@jmzkw)

    nobita様

    またまたお調べいただきましてありがとうございます。

    ここの記載されているように、さくらでメールアドレスを新たに作成し、
    そのアドレスを下記に指定しましたが、やはりnoreply@example.sakura.ne.jpになってしまいます。

    $headers[] = sprintf( ‘From: “%1$s” <%2$s>’, $blogname, ‘test@example.sakura.ne.jp’ );

    遅れて相談なのですが。
    ユーザーが投稿して管理者が確認コメントすると通知が行われません。一度、返信するとその後は理想的な動きになることは確認させていただいております。

    初めのコメントへのメール通知が送れるようにしたいのですがご返信願いませんでしょうか?

    管理画面の設定はコメントを受け付けるようにしていると2重にメールが送られるのでチェックを外してあります。
    そうしてfinctionへ上記のコードを設定するとメール通知が行われておりますが初めのコメントへ通知されません。
    何卒、ご返答願いませんでしょうか?

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • トピック「コメントが書かれる都度、コメントを記載したユーザにメール通知」には新たに返信することはできません。