Доброго времени суток.
В очередной раз требуется помощь. 🙂
Суть такова:
При добавлении оппонента в блэклист отправлять ему сообщения в чате возможно. Но сам оппонент их прочесть не может. 🙁
Подскажите, к чему прицепится для автоматической разблокировки оппонента при отправке ему сообщения?
пробуйте прицепиться к экшну 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", оно принимает объект данных о сообщении и текущем чате, при его срабатывании можно проверять статус кнопки блокирования пользователя и вносить изменения в эту кнопку при совпадении определенных условий. Пробуйте.