あるメンバーが別のメンバーにメッセージを送信すると、受信者はbuddypressでメッセージと電子メールを受信します。
私はそれを変更したいのですが、あなたがログインしていてもあなたのメールボックスにはたくさんのメールがあるのですから。
どこにコードを追加したのかわかりましたが、フックする方法がわかりません(add_actionまたはadd_filter)ファイルは次のとおりです。
そして、変更はファイルの最後にあり、電子メールを送信する前にifテストを追加するだけです。
if (!is_user_online($recipient->user_id)) {
wp_mail( $email_to, $email_subject, $email_content );
}
どうすれば私はbuddypressのコアファイルを変更せずにこれを行うことができますか?
受信者がログインしている場合は、$email_to
をフィルタリングして空の文字列を返すことができます。これにより、wp_mail()
はメッセージの送信に失敗し、falseを返します。以下をtheme functions.php
またはbp-custom.php
ファイルに追加してください。
add_filter('messages_notification_new_message_to', 'disable_loggedin_email_notification');
function disable_loggedin_email_notification($email_to) {
$user = get_user_by('email',$email_to);
if (bp_has_members("type=online&include=$user->ID")) {
$email_to = '';
}
return $email_to;
}
編集:あなたが使っているプラグインを使ってあなたのケースに考えられる解決策は、そのEメールを持っているすべてのユーザーを入手し、誰かがオンラインかどうかチェックすることです。そのリストをbp_has_members()
関数に渡します。
add_filter('messages_notification_new_message_to', 'disable_loggedin_email_notification');
function disable_loggedin_email_notification($email_to) {
$users = get_users(array(
'search' => $email_to
));
$ids = array();
foreach ($users as $user) {
$ids[] = $user->ID;
}
$ids = implode(',', $ids);
if (bp_has_members("type=online&include=$ids")) {
$email_to = '';
}
return $email_to;
}