Buddypress enviar notificação por e-mail somente se o usuário não estiver logado [fechado]

3

Quando um membro envia uma mensagem para outro membro, o destinatário recebe uma mensagem no buddypress e também um email.

Eu quero mudar isso porque se você receber muitas mensagens, você tem muitos e-mails em sua caixa de correio, mesmo se você estiver logado: Eu quero receber e-mails somente se eu não estiver logado no buddybress.

Eu encontrei onde adicionar o código, mas eu não sei como ganchos (add_action ou add_filter) O arquivo é: wp-content / plugins / buddypress / mensagens-bp / bp-messages-notifications.php

e a modificação está no final do arquivo, apenas adicionando o teste if antes de enviar o e-mail:

if (!is_user_online($recipient->user_id)) {
     wp_mail( $email_to, $email_subject, $email_content );
}

Como posso fazer isso sem alterar o arquivo principal do buddypress?

    
por Arystark 26.11.2012 / 17:27

1 resposta

1

Uma coisa que você pode fazer é filtrar $email_to e retornar uma string vazia se o destinatário estiver logado. Dessa forma, wp_mail() não enviará a mensagem e retornará false. Adicione o seguinte ao tema functions.php ou a bp-custom.php file:

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;
}

EDITAR: Uma possível solução para o seu caso com o plug-in que você usa é obter todos os usuários que têm esse e-mail e verificar se algum está on-line passando essa lista para bp_has_members() function :

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;
}
    
por Ahmad M 26.11.2012 / 19:59