質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.37%

WordPressのコメントのメール通知文を編集していた際のトラブルについて教えてください。

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,426

問題

仕事でWordPressを使っています。
コメントの通知メールについて質問です。
functions.phpに以下のサイトの内容を元に自分でカスタマイズし、最初は上手くいってました。
http://wpcj.net/1154

しかし、とある理由で「cbnet Multi Author Comment Notification」というプラグインをインストールし、有効化したところ、上記の記述内容が反映されなくなってしまいました。

wp-includes/pluggable.phpに先ほどのサイトと似た内容があり、ここに記述するとパッと見は直ったように見えますが、実はコメントの入力欄に、「名前」、「メールアドレス」、そして「会社名」を追加しなくてはなりません。
この「会社名」がどこをいじればメール文に表示されるのか知りたいです。

下記がfunctions.phpに記述した内容です。

/**
 * コメント確認メールの件名を変更します。
 */
function custom_comment_moderation_subject( $subject, $comment_id ) {
  // ブログ名(サイト名)
  $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
  // コメント
  $comment = get_comment($comment_id);
  // 投稿
  $post = get_post($comment->comment_post_ID);
  // トラックバック、ピンバック、コメントそれぞれで件名を変更
  switch ( $comment->comment_type ) {
    default: // コメント
      return "投稿「{$post->post_title}」に新しいコメントがありました";
  }
}
add_filter( 'comment_moderation_subject', 'custom_comment_moderation_subject', 10, 2 );

/**
 * コメント確認メールの本文を変更します。
 */
function custom_comment_moderation_text( $notify_message, $comment_id ) {
  global $wpdb;
  // コメント
  $comment = get_comment($comment_id);
  // コメントのあった投稿
  $post = get_post($comment->comment_post_ID);
  // 投稿元のドメイン名
  $comment_author_domain = @gethostbyaddr($comment->comment_author_IP);
  // 未承認の数を取得
  $comments_waiting = $wpdb->get_var("SELECT count(comment_ID) FROM $wpdb->comments WHERE comment_approved = '0'");
  // ブログ名(サイト名)
  $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
  // コメント
  $comment_content = wp_specialchars_decode( $comment->comment_content );
  // 会社名
  $comment_company = get_comment_meta( get_comment_ID(), 'yourcompany',true);
  if ( $yourcompany ) {
    $author .= ' (' .$yourcompany . ')';
  }
  return $author; //コメント者の後に続けて出力。

  // トラックバック、ピンバック、コメントそれぞれで本文を変更
  switch ( $comment->comment_type ) {
    default: // コメント
      $notify_message = "投稿「{$post->post_title}」に新しいコメントがありました。\r\n";
      $notify_message .= "コメント者: {$comment->comment_author}\r\n";
      $notify_message .= "会社名: {$comment->comment_company}\r\n";
      $notify_message .= "コメント: {$comment_content}\r\n";
      $notify_message .= "この投稿へのすべてのコメントはこちら:" .get_permalink($comment->comment_post_ID) . "\r\n";
      $notify_message .= "\r\n";
      break;
  }

  return $notify_message;
}
add_filter( 'comment_moderation_text', 'custom_comment_moderation_text', 10, 2 );

現状のメール文

(ここから)

投稿「投稿タイトル」に新しいコメントがありました。

コメント者: 〇〇〇
会社名: 
コメント: あああああ

この投稿へのすべてのコメントはこちら:
https://example.co.jp/aaaaa

(ここまで)

「会社名: 」の部分が空欄になっていますが、ここに会社名入力欄で入力した内容が出力されるようにしたいです。

質問のまとめ

初投稿なためどのように質問すべきかわかりませんが、要するに、
1上記メール文の「会社名: 」が空欄になっているが、ここに入力欄で入力した内容が出力されるようにしたい
2pluggable.phpに上記functions.phpと同じことを記述してメール文が表示されているがそれでいいのか
3そもそも何故「cbnet Multi Author Comment Notification」というプラグインを使うと上記functions.phpに入力した内容が反映されなくなるのか
4何か他にコメントした際に送られる通知メール文を変更、編集する良い方法があるか

以上の内容をご教示いただきたいです。

参考になるかわかりませんが、
WordPressのバージョンは4.9.12です。
仕事で使っているためバージョンの変更は原則できません。

長文になってしまいましたが、どうぞよろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2019/11/01 04:40

    (質問文は編集できます)質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
    また、例示用ドメインはご自身で所有されていない限り example.com, example.jp, example.co.jp など例示用に予約されたドメイン名を利用してください。 http://www.atmarkit.co.jp/fwin2k/win2ktips/801exampledom/exampledom.html https://blog.jxck.io/entries/2017-09-27/example-local-test-domains.html https://blog.ko31.com/201304/sample-domain-example/

    キャンセル

  • CHERRY

    2019/11/02 16:09

    Wevサーバーのログファイルには、どのようなメッセージが、記録されていますか?
    また、WordPress をデバッグモードにするとどのようなメッセージが表示されますか?

    キャンセル

回答 2

+2

同じ状況が再現できないため、適切な回答にはならないかもしれませんが、提示されている部分の問題点のみ回答します。


1上記メール文の「会社名: 」が空欄になっているが、ここに入力欄で入力した内容が出力されるようにしたい

提示のコードでその出力にはならないと思います。なぜなら、custom_comment_moderation_textにて$author .= ' (' .$yourcompany . ')';と定義していない変数に文字列を追加しようとしている上、return $author;でそれ以降の処理を無視しています。(return;があると関数は終了するのでそれ以降にかかれたものは処理されません)

なので、それ以外のところに書かれたコードが効いているのでしょう。


2pluggable.phpに上記functions.phpと同じことを記述してメール文が表示されているがそれでいいのか

WordPressの本体ファイルを編集しているということであれば、やめたほうがよいです。なぜならアップデート(更新)が難しくなるからです。(そういうこともあってアップデートできなくなってしまっているのでは)
PHP自体のアップデートも早くなっている昨今、本体のアップデートをしないことは「急に動かなくなった」ということが発生してもおかしくない状況を作ります。PHPをアップデートしない、ということをすると、致命的なバグ等が発見された場合、対処しないのでしょうか。
長くそのサービスを続けるのであれば、サーバ/PHP/WordPressのアップデートはこまめにするほうが、結局手間(&各種コスト)が少なくなると思います。


3そもそも何故「cbnet Multi Author Comment Notification」というプラグインを使うと上記functions.phpに入力した内容が反映されなくなるのか

特に使用した事も無いので、予想でしか有りませんが、comment_moderation_textのフックをそのプラグインが使用していない、もしくは上書きするように設定しているかどちらかだと思います。
プラグイン独自のフックがある場合も有るし、無い場合もあるので、プラグインのコードを読んで、そのあたりは確認するしかないと思います。(もしくは開発者に確認するか)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/11/12 17:24

    返信遅くなりすいません。
    上記の文読みました。
    何とか頑張ってみます。

    キャンセル

  • 2020/06/26 15:02

    僕も同じようなことしたいだけど
    難しいですねぇ~

    参考になるような情報あったら
    是非、追記をお願いしますm(__)m

    キャンセル

+1

「cbnet Multi Author Comment Notification」のソースコードを読みましたが、特段"comment_moderation_text"のフィルターを上書きしていませんでしたので、別の理由でfunctions.phpの内容が反映されなくなったのではないでしょうか? 他に追加したプラグインや設定の変更がなかったか、再確認した方がいいと思います。

さらに、wp-includes/pluggable.php を書き換えた際に、"comment_moderation_text"に関する部分を間違って書き換えてしまったために、一層おかしな状況に陥っているのではないでしょうか?

kei344さんが指摘したように、Wordpressのコアフィル群を直接書き換えるのはNGです。
最悪サイトが正常に動作せず再インストールする羽目になりますし、Wordpressのアップデートに追従させることができず、セキュリティ問題に対応できなくなります。業務でやっているならなおさら悪手です。

まずは、wp-includes/pluggable.phpやプラグインの状態を元に戻してから、kei344さんが1.で指摘したように、functions.phpに記述したコードの問題点を修正しましょう。
業務でWordpressをカスタマイズしていらっしゃるようなので、単なるコピペでなく正しくPHPのコードを理解して書くことをおすすめします。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/11/12 17:25

    ご回答ありがとうございます。
    何とか頑張ってみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • トップ
  • PHPに関する質問
  • WordPressのコメントのメール通知文を編集していた際のトラブルについて教えてください。