Доброго времени суток.
В очередной раз требуется помощь. 🙂
Суть такова:
При добавлении оппонента в блэклист отправлять ему сообщения в чате возможно. Но сам оппонент их прочесть не может. 🙁
Подскажите, к чему прицепится для автоматической разблокировки оппонента при отправке ему сообщения?
пробуйте прицепиться к экшну rcl_chat_add_message он принимает массив данных отправленного сообщения
В этом хуке проверьте значение пользовательского поля
$user_block = get_user_meta($user_1,'rcl_black_list:'.$user_2);
тут проверяется заблокирован ли пользователь $user_2 у пользователя $user_1, если да, то снимаем блок:
delete_user_meta($user_1,'rcl_black_list:'.$user_2);
В очередной раз огромное мерси 🙂
Итак, готовое решение.
В файле function.php вашей темы добавляем функцию:
/** * [chat_unblock FRONT-OFFICE: Unblock private user chat] * @return [none] [No return] */ function chat_unblock( $user_ID ) { $user_1 = $user_ID['user_id']; // ID current user /* Если надо блокировать/разблокировать по ролям, раскомментировать... */ // $user_info = get_userdata( $user_1 ); // $role = $user_info->roles[0]; // $user_info = get_userdata( $user_id ); // user role // $role = $user_info->roles[0]; // if ( $role == 'author' ) { // return; // } /* ...строки */ $user_2 = $user_ID['private_key']; // ID opponent $user_block = get_user_meta( $user_1, 'rcl_black_list:' . $user_2 ); // blocked/unblocked opponent status (true/false) if ( $user_block ) { delete_user_meta( $user_1, 'rcl_black_list:' . $user_2 ); } } add_action( 'rcl_chat_add_message', 'chat_unblock', 1 );
...finita la commedia 🙂
Андрей CS сказал(а)
функция принимает аргумент со странным названием $user_ID, может сбить с толку, лучше использовать $message
Полность согласен.
Обновленный код:
/** * [amconsoft_chat_unblock FRONT-OFFICE: Unblock private user chat] * @param [array] $message [Message data] * @return [none] [No return] */ function amconsoft_chat_unblock( $message ) { $user_1 = $message['user_id']; // ID current user /* Если надо блокировать/разблокировать по ролям, раскомментировать... */ // $user_info = get_userdata( $user_1 ); // $role = $user_info->roles[0]; // $user_info = get_userdata( $user_id ); // user role // $role = $user_info->roles[0]; // if ( $role == 'author' ) { // return; // } /* ...строки */ $user_2 = $message['private_key']; // ID opponent $user_block = get_user_meta( $user_1, 'rcl_black_list:' . $user_2 ); // blocked/unblocked opponent status (true/false) if ( $user_block ) { delete_user_meta( $user_1, 'rcl_black_list:' . $user_2 ); } } add_action( 'rcl_chat_add_message', 'chat_unblock', 1 );
... да что-ж со мной сегодня, сплошные ошибки в коде 🙁
Финальная версия кода функции:
/** * [chat_unblock FRONT-OFFICE: Unblock private user chat] * @param [array] $message [Message data] * @return [none] [No return] */ function chat_unblock( $message ) { $user_1 = $message['user_id']; // ID current user /* Если надо блокировать/разблокировать по ролям, раскомментировать... */ // $user_info = get_userdata( $user_1 ); // $role = $user_info->roles[0]; // if ( $role == 'author' ) { // указать роль, которая не может разблокировать чат // return; // } /* ...строки */ $user_2 = $message['private_key']; // ID opponent $user_block = get_user_meta( $user_1, 'rcl_black_list:' . $user_2 ); // blocked/unblocked opponent status (true/false) if ( $user_block ) { delete_user_meta( $user_1, 'rcl_black_list:' . $user_2 ); } } add_action( 'rcl_chat_add_message', 'chat_unblock', 1 );
насчет смены класса я посмотрю, а вот вносить изменения в код элементов на странице можно используя новый функционал хуков в js, при удачной отправке сообщения в чат срабатывает событие "rcl_chat_add_message", оно принимает объект данных о сообщении и текущем чате, при его срабатывании можно проверять статус кнопки блокирования пользователя и вносить изменения в эту кнопку при совпадении определенных условий. Пробуйте.