function custom_email_sender_page() {
if (isset($_POST['send_custom_email'])) {
$subject = sanitize_text_field($_POST['subject']);
$message = wp_kses_post($_POST['message']);
$role = sanitize_text_field($_POST['role']);
$users = [];
// Send to role OR all users
if ($role === 'all') {
$users = get_users();
} else {
$users = get_users([
'role' => $role
]);
}
$sent = 0;
foreach ($users as $user) {
wp_mail(
$user->user_email,
$subject,
$message,
['Content-Type: text/html; charset=UTF-8']
);
$sent++;
}
echo "<div class='updated'><p>Email sent to {$sent} users.</p></div>";
}
$roles = wp_roles()->roles;
?>
<div class="wrap">
<h1>Custom Email Sender</h1>
<form method="POST">
<table class="form-table">
<tr>
<th>Send To Role</th>
<td>
<select name="role" required>
<option value="all">All Users</option>
<?php foreach ($roles as $key => $role): ?>
<option value="<?php echo esc_attr($key); ?>">
<?php echo esc_html($role['name']); ?>
</option>
<?php endforeach; ?>
</select>
</td>
</tr>
<tr>
<th>Subject</th>
<td>
<input type="text" name="subject" style="width:100%;" required>
</td>
</tr>
<tr>
<th>Message</th>
<td>
<textarea name="message" rows="10" style="width:100%;" required></textarea>
</td>
</tr>
</table>
<p>
<button type="submit" name="send_custom_email" class="button button-primary">
Send Email
</button>
</p>
</form>
</div>
<?php
}