• 解決済 lyuna

    (@lyuna)


    現在、BuddyPressで完全会員制のSNSサイトを運営しています。
    そして「BP-NotificationWidget」プラグインでウィジェットに各通知を表示される様にしています。

    サイト内では各会員が好きに投稿ページを作成できるのですが、その投稿ページにコメントされたことを、その投稿者へ通知する様にしたいと思っております。

    ネット等で調べたところメールでの通知方法ばかりでしか見つかりませんでしたが、メールを使いたく無いので、BuddyPressの通知機能のみでやるようにしたいです。

    php初心者というのもあるのですが、ソースを追いかけてみた所、一応「通知機能」へ通知したい情報をセットしているような箇所は見つけたのですが、具体的にどう書けば私がやりたいことが出来るのか、またその通知するタイミング(コメントされたことを知るタイミング)は何処なのかはわかりませんでした。

    誰かヒントだけでも良いのでご教授頂けたら幸いです。
    以上、よろしくお願いします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • タイミングは個人の好みだと思うのですがいくつかあります。(詳しいことはCodexのアクションをご確認ください)。例えばブログへのコメント時に何かをしたいということであれば、comment_postのアクションに処理を追加すれば良いと思います。
    ブログではない場合は、そのページのテンプレートのソースを読んでみてください。同じようなアクションが呼ばれていると思います。何かの参考になれば幸いです。

    トピック投稿者 lyuna

    (@lyuna)

    ありがとうございます。

    とりあえずcomment_postで全ソースを検索したところ、wp-includes/comment.phpの2096行目に
    do_action( 'comment_post', $comment_ID, $commentdata['comment_approved'] );
    というのを見つけました。
    そして、その下にwp_notify_postauthorというのを見つけたのですが、これは調べたところコメントの内容をメールで送信している関数だとわかりました。

    サイトではメールでの通知は一切行われていないので、たぶんこれをカスタマイズして使えばいいのかなと思いまして、子テーマにて再定義することにしました。

    ただ、ここからまた行き詰ってしまいまして、buddypress内での通知はbp_notifications_add_notificationで行っていると思うのですが、これを使っているところを参考にすると、どこもこの関数をラップしてフックしているようでした。
    (あまりフックというのがよくわかっていないのですが、C言語でいうコールバック関数という認識でしょうか?)
    この時、bp_notifications_add_notificationに渡す引数をどこからどうやって持ってきているのか、まだ理解しておらずどうしたらいいのかわかりません。
    (もしかしたら、どちらかというとphpの話?)

    引き続き誰かご教授頂けたら幸いです。
    よろしくお願いします。

    bp_notifications_add_notificationの引数についてはBuddyPressのCodexに若干説明がありますね。
    全部optionalみたいですので、必要なもののみ渡せば良いと思います。

    例えばメンションのnotificationでは、component_actionにnew_at_mentionを設定して呼び出している模様ですが(bp-activity/bp-activity-notifications.php::bp_activity_at_mention_add_notification())、先にsetup_globals()で’notification_callback’を定義しておく必要がありそうです。(bp-activity/bp-activity-loader.php::setup_globals)
    そしてここで定義した関数でbp_notifications_add_notification()の引数であるcomponent_actionの動作を実装すると、動くかもしれません。

    私自身このような実装はしたことがなく、ソースを読んでみて感じたことを記載しています。従って不足点や勘違いもあると思いますがご容赦ください。また、結構難易度が高い感じですので、トライアンドエラーで取り組む必要があると思います。
    以上、申し遅れましたが私もBP-NotificationWidgetを使っています。便利でいいですね。

    追記ですが、フックは私も正確な定義は分かりません。。。だいたいそんな感じですよ〜

    トピック投稿者 lyuna

    (@lyuna)

    ありがとうございます。

    ご教授頂いた事を参考にしながら自分なりに色々ソースを解析してみたのですが、例えばbp-activity/bp-activity-notifications.php の bp_activity_format_notifications()では、通知を知らせる文言とリンク先の作成をしていると思います。
    その中でフックの呼び出し(apply_filters())をしていますが、通知が溜まっている数($total_items)によって、bp_activity_multiple_at_mentions_notificationかbp_activity_single_at_mentions_notificationを呼び出していると思います。
    (関数の説明コメントもそんな感じなのが書かれていると思います)
    しかし、両方ともどこを探しても見つけることが出来ませんでした。

    これは私の認識が間違っているのか、もしくは探し方が悪いだけでどこかにあるのかのどちらかなのでしょうか?

    フックのご説明ありがとうございます。
    また、私もBP-NotificationWidgetは本当に良いプラグインだと思っております。

    ここでのfilterは「第2引数のリンク文字列をカスタマイズしたい場合はadd_filterしてね」というものに見えますので、特に変更する必要がない場合は使わなくて良いと思います。
    探しても見つからない件は、そういうことで無いのでしょう。

    トピック投稿者 lyuna

    (@lyuna)

    ありがとうございます。

    ご説明ありがとうございます。
    フック(フィルタ、アクション)について色々と誤解していた事に気付きました。

    色々と試行錯誤した結果、なんとか自分がやりたいことが実装できました。
    本当に感謝です。

    なのでこれにて解決とさせて頂きます。
    最後に誠にありがとうございました。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「BuddyPressでコメントを通知したい」には新たに返信することはできません。