Intereting Posts
Автоматически заменить исходное загруженное изображение с большим размером изображения Не получать входные данные из get_query_var Как добавить второе меню «Сообщений» в свою панель? Изменить изображение в зависимости от пути к странице Что не так с моим правилом перезаписи для URL-адреса страницы с параметрами запроса и короткими кодами? Пометка по умолчанию для стандартного и пользовательского типа сообщений в wordpress Тема window.open вызывает «Страница не найдена» Как показать файл .swf? Woocommerce – Скрыть "добавить в корзину" на бесплатные продукты Есть ли способ ограничить многократную загрузку в поле для загрузки мультимедиа? Как получить последний отрывок из определенной категории? Отключить Jetpack Публиковать в блоге, но сохранить для пользовательского типа сообщения Список пользователей по году рождения с использованием цикла foreach для динамического заполнения лет и данных Сбросить весь статус запасов в woocommerce Как добавить div в меню?

Исключить текущую электронную почту пользователя и отправить уведомление

В настоящее время я создаю плагин wordpress для отправки уведомлений по электронной почте в список ролей пользователей, которые комментируют сообщение.

Например:

Если пользователь с ролью «подписчика» комментирует сообщение, все остальные пользователи, у которых есть «абонентская» роль, получают уведомление по электронной почте. В настоящее время я достиг этого через следующий код

if( current_user_can('subscriber')) { $user_query = new WP_User_Query( array( 'role' => 'subscriber'); foreach ( $user_query->results as $user ) { $mail=$user->user_email; $subject ="this is example"; $message = ""; $message .= "$post_permalink\n"; wp_mail($user->user_email, $subject,$message); } } 

Вышеупомянутый код отправляет электронную почту всем пользователям, у которых есть «абонентская» роль.

Вывод:

Он получает даже текущего пользователя, который комментирует сообщение и отправляет уведомление по электронной почте.

Проблема, которую необходимо решить:

Как я могу исключить текущую электронную почту пользователя и отправлять только уведомления другим пользователям, у которых есть роль «подписчика».

Во-первых, вы должны знать, что current_user_can() принимает только возможности, а не роли, поэтому вы используете его неправильно, и вы можете получить неожиданные результаты.

При этом, чтобы исключить пользователя из формы WP_User_Query вы можете использовать параметр exclude :

 // Get current user data $user = wp_get_current_user(); // Check if current user is a subscriber if( ! empty( $user ) && in_array( "subscriber", (array) $user->roles ) ) { $user_query = new WP_User_Query( array( 'role' => 'subscriber', // exlude current user 'exclude' => array( $user->ID ), ) ); $subscribers = $user_query->get_results(); if( ! empty( $subscribers ) ) { foreach ( $subscribers as $user ) { $mail = $user->user_email; $subject ="this is example"; $message = ""; $message .= "$post_permalink\n"; wp_mail( $mail, $subject, $message); } } } 

Следующее должно работать для вас: –

  if( current_user_can('read')) { $exclude_user = array(); $exclude_user[] =get_current_user_id(); $args = array( 'role' => 'subscriber', 'exclude' => $exclude_user ); $user_query = new WP_User_Query( $args); foreach ( $user_query->results as $user ) { $mail=$user->user_email; $subject ="this is example"; $message = ""; $message .= "$post_permalink\n"; wp_mail($user->user_email, $subject,$message); } }