コメントの承認メールを記事の作成者に送信するプラグイン Notify Author !!!

notify-author
wpxtreme がお届けする WordPress プラグイン第1段は、フォーラムでの回答がめんどくさいからっていう、またもやド叱られかねない理由で作成いたしました。kz は立派な大人ですので、例えド叱られても「うるせーバーカ」なんつーハシタないレスポンスはいたしません。御忠告は真摯に受けとめ、自分でしっかりと考えを整理した上で、ブログ上にてクソ長ーーーーい総括をいたしますので、どちら様もご遠慮なく叱咤くださいませ。できれば激励8割でお願いします。あと、口のキキ方にはどなた様もゼヒとも気をつけましょう。しつこい。
さて、フォーラム元ネタは 記事を書いた人にコメントの承認をさせたい です。言われてみれば、至極まっとうな仕様ですね。カスタマイズ的にはライトなのでプラグイン初心者のオレ様にはうってつけです。がんばるぞ。 ぁ? 非プラ三原則 がどうしたって?何だそれ、おいしいの?

Description

Notifies the author of the post about a new comment that is a awaiting approval.
要は、WordPress の記事へコメントが投稿された時に管理者宛に送られてくる「モデレートしてください」のメールを、その記事の作成者宛に送信したい、って話です。
ちなみに、「モデレートしてください」のメールは

  • 管理画面メインメニュー[設定|ディスカッション]の[コメント表示条件]で
    「管理者の承認を常に必要とする」にチェックがある場合は、常に
    「すでに承認されたコメントの投稿者のコメントを許可し、それ以外のコメントを承認待ちにする」にチェックがある場合は、今まで承認されたことがない人のコメントについて
  • 管理画面メインメニュー[設定|一般]の[メールアドレス]宛に送信されます。

Download

  • Notify Author !!!  version: 1.0 (.zip  1.39 kB)
  • 公式プラグインディレクトリ からダウンロードできると良いよねー。

    Installation

    1. Upload `notify-author.php` to the `/wp-content/plugins/` directory.
    2. Activate `Notify Author !!!` through the 'Plugins' menu in WordPress.

    これくらいの英語は翻訳されんでも読もうぜ。な。

    プラグインによるカスタマイズの基本

    カスタマイズのとっかかりはまず、どこをイジればいいのかを探すことから始めます。ヒントはどうにもシックリこない件名の「モデレートしてください」メールにありますよ。

    承認する: http://example.com/wp-admin/comment.php?action=approve&c=4

    ね。「approve」ってあるでしょ。こんなん「承認」でしか使わない単語よね。んじゃ「approve」で WordPress コアファイルを検索するのじゃ!って結構な数のファイルがありますね。じゃー wp-includes/pluggable.php から見てみましょう。

    #1138 $notify_message .= sprintf( __('Approve it: %s'),  admin_url("comment.php?action=approve&c=$comment_id") ) . "\r\n";

    なんてラッキー!この関数は wp_notify_moderator() なのでビンゴですね、「ビンゴ」なんて実社会で言うヤツ見た事ないですけど。
    実はこの pluggable.php にあるファンクションは、プラグインで好きにカスタマイズしちゃってちょうだいってヤツばかりなんです。なんつっても pluggable ですから。意味わかるよね?よし、いいコだ。んで、1つ1つのファンクションが

    if ( !function_exists('ファンクション名') ) : 〜 endif;

    で囲まれてますでしょ奥さん?これは、この名前のファンクションがプラグインに無けりゃ今からコレ使うようにするし、ありゃぁソッチ使いますよ、って意味です。クダケ過ぎてかえってわかりにくいですね。フィルタだのアクションだのフックを駆使しなくても関数ごとゴッソリ変えられるってワケです。で、プラグインで同名の名前を作って処理内容を自分色に染め上げるわけですが、プラグインでのファンクションの定義も pluggable.php と同じく

    if ( !function_exists('ファンクション名') ) : 〜 endif;

    で囲ってあげましょう。これは、プラグイン有効化の時に、既にオリジナルのファンクションが読まれちゃってるので、再定義エラー!ってならないようにするためです。有効化した後は、WordPress くんは有効化されたプラグイン → pluggable.php の順に読み込みますので、プラグインで定義されたファンクションの方が有効になるって仕組みです。ってややこしいわ!

    カスタマイズの詳細

    なんともシックリこない件名の「モデレート」してくださいメールの宛先になっている、管理画面メインメニュー[設定|一般]の[メールアドレス]は、admin_email ってゆーオプションに入ってます。wp_notify_moderator() では以下のようにアドレスを取得し、メール送信します。

    $admin_email = get_option('admin_email');
      :
    @wp_mail($admin_email, $subject, $notify_message, $message_headers);

    pluggable らしくファンクション内には一見するとフックがありません。とは言っても get_option() の内部で呼んでる pre_option_admin_email フィルタでムリムリカスタマイズすることだってできるんだぜ、ぁあん?ですが、諸々メンドクサイことになること必至ですので、pluggable らしく関数を丸コピして、必要な所だけコソッと変更しましょう。

    オリジナル:
    $comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_ID=%d LIMIT 1", $comment_id));
    $post = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->posts WHERE ID=%d LIMIT 1", $comment->comment_post_ID));
      :
    $admin_email = get_option('admin_email');
      :
    @wp_mail($admin_email, $subject, $notify_message, $message_headers);
    
    変更後:
    $comment = get_comment($comment_id);
    $post = get_post($comment->comment_post_ID);
    $user = get_userdata($post->post_author);
      :
    @wp_mail($user->user_email, $subject, $notify_message, $message_headers);

    はい、こんだけです。オリジナルの $post, $comment の取得の仕方はツライので、ステキに書き換えましょう。あとは、メールの送付先を投稿の作成者のアドレスにするだけです。最後にプラグインファイルとしての体裁を整えればできあがりです。詳細はプラグインファイルをダウンロードして見てみて。なんつー手抜き。
    ちなみに、作成者に 'moderate_comments' の権限は無くていいのかね、って疑問がありますが 、承認処理をしている wp-admin/comment.php では記事に対する 'edit_posts' の権限のチェックしかしてません。記事の作成者は当然 'edit_posts' 権限があるので、Capabilities に関しては気にせんで OK です。今のところ。

    Conclusion

    ちゅーわけで、初めてのプラグインは何とか動いてるようです。初めてって不安ですよね。こ、これで合ってるのかな。オレ変じゃないかな。とドキドキもんです。でもま、変だっていいじゃない、間違ってても気にすんなよ。皆そうやって成長するもんさ。ただちょっと先を行ってる人は、アタタカク見守ってあげようぜ。経験値があるのは別に偉いってことでも能力が上ってことでもありゃしねぇ。自分だって経験値が無い時があったんだから、そういうこと忘れないように、オゴリタカブラナイように。そいでもって追い抜かれる恐怖を感じるなら、相手を叩くよりも自分を高める方に持って行くのがクールってもんだぜ。
    ぁ、オレ様がブチ抜くよフフ、って話じゃないからね。オレって結構謙虚なんだからラブ♥
    当プラグインへのご質問・ご要望は コメント でお気軽に。

    動作確認バージョン
    • WordPress 3.0.1

    6 Comments

    • pluggable.php にあるファンクションは、プラグインで好きにカスタマイズしちゃってちょうだいってヤツばかりなんです。なんつっても pluggable ですから。意味わかるよね?よし、いいコだ。んで、1つ1つのファンクションが

      if ( !function_exists('ファンクション名') ) : 〜 endif;

      で囲まれてますでしょ奥さん?これは、この名前のファンクションがプラグインに無けりゃ今からコレ使うようにするし、ありゃぁソッチ使いますよ、って意味です。

    • yoshidakaori yoshidakaori

      http://ja.forums.wordpress.org/topic/6683
      からやって参りました。
      どうやって画像を呼び出してきたらいいのか、
      考えつかなかったので、
      kzさんの返答で目からウロコが落ちました〜〜〜!
      ありがとうございます☆

      • kz kz

        お役に立ててナニヨリです!
        WordPress をじゃんじゃん使い倒して、
        わからないことがあったらフォーラムでどんどん訊いてみてください◎

    • コメントの承認メールを記事の作成者に送信するプラグイン Notify Author !!! http://t.co/gRbQDkH via @AddToAny

    • []