我目前正在构建一个wordpress插件,用于向对帖子发表评论的用户角色列表发送电子邮件通知。
For Example:
如果具有“subscriber”角色的用户对帖子发表评论,则具有“subscriber”角色的所有其他用户都会收到电子邮件警报。目前,我已经通过以下代码实现了这一点
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);
}
}
上述代码将向所有具有“订阅者”角色的用户发送电子邮件。
Output:
它甚至可以获得对帖子发表评论并发送电子邮件通知的当前用户。
Problem to be solved:
如何排除当前用户的电子邮件并仅向具有“订阅者”角色的其他用户发送通知。
最合适的回答,由SO网友:cybmeta 整理而成
首先,你应该知道current_user_can()
只接受功能,不接受角色,因此您使用它是错误的,最终可能会得到意外的结果。
也就是说,排除用户形式WP_User_Query
您可以使用exclude parameter:
// 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);
}
}
}