Buddypress enviar notificaciones por correo electrónico solo si el usuario no ha iniciado sesión [cerrado]

3

Cuando un miembro envía un mensaje a otro miembro, el destinatario recibe un mensaje en buddypress y también un correo electrónico.

Quiero cambiar eso porque si recibes muchos mensajes, tienes demasiado correo en tu buzón incluso si has iniciado sesión: quiero recibir correo solo si no estoy registrado en buddybress.

He encontrado dónde agregar el código pero no sé cómo enganchar (add_action o add_filter) El archivo es: wp-content / plugins / buddypress / bp-messages / bp-messages-notifications.php

y la modificación está al final del archivo, simplemente agregando la prueba if antes de enviar un correo electrónico:

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

¿Cómo puedo hacer esto sin cambiar el archivo principal de buddypress?

    
pregunta Arystark 26.11.2012 - 17:27

1 respuesta

1

Una cosa que puedes hacer es filtrar $email_to y devolver una cadena vacía si el destinatario ha iniciado sesión. De esta manera, wp_mail() no podrá enviar el mensaje y devolver el mensaje falso. Agregue lo siguiente al tema functions.php o al archivo 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;
}

EDITAR: Una posible solución para su caso con el complemento que utiliza es obtener todos los usuarios que tienen ese correo electrónico y verificar si alguno está en línea pasando esa lista a la función 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;
}
    
respondido por el Ahmad M 26.11.2012 - 19:59

Lea otras preguntas en las etiquetas