Вопрос или проблема
HTML формы приведен ниже
<?php
for($i=$start;$i < $end ;++$i)
{
if($emails[$i]!=""){
$userId=$emails[$i]['ID'];
$user_info = get_users($userId);
echo"<tr class="iedit alternate">
<td class="name column-name" style="border:1px solid #DBDBDB;padding-left:13px;"><input type="checkbox" id='haet_mail_test_address' name="ckboxs[]" value="".$emails[$i]["user_email']."'> ".$emails[$i]['user_email']."</td>";
echo "<td class="name column-name" style="border:1px solid #DBDBDB;"> ".$user_info->user_login."</td>";
echo "</tr>";
}
}
?>
<button class="button-primary" id="haet_mail_test_submit" name="submit" type="submit">Отправить письмо</button>
<div id="haet_mail_test_sent" class="haet-mail-dialog" title="<?php _e('Email sent','wp-html-mail'); ?>">
<p>
<?php _e('Your message has been sent.','wp-html-mail'); ?>
</p>
ниже мой Javascript код
$('#haet_mail_test_submit').click(function(){
var checkbox = $('#haet_mail_test_address').val();
$.post(ajaxurl, { 'action':'haet_mail_send_test', 'checkbox':checkbox} , function(response) {
$( "#haet_mail_test_sent" ).dialog({
dialogClass: "no-close",
modal: true,
buttons: [
{
text: "OK",
click: function() {
$( this ).dialog( "close" );
}
}
]
});
});
});
AJAX функция приведена ниже
function send_test() {
$email= $_POST['checkbox'];
echo $email;
wp_mail( $email, ''.$email.'');
wp_die();
}
Я новичок в WordPress, так что как я могу отправить значения чекбоксов в wp_mail
Сначала вам нужно добавить класс для всех чекбоксов, так как использование одного и того же id для нескольких элементов не рекомендуется
<input type="checkbox" class="new_class" id='haet_mail_test_address' name="ckboxs[]" value="".$emails[$i]["user_email']."'>
Теперь нам нужно изменить способ получения значений из чекбоксов
Измените
var checkbox = $('#haet_mail_test_address').val();
На
var checkbox = $(".new_class:checkbox:checked").map(function(){
return $(this).val();
}).get();
console.log(checkbox); // проверьте, получаете ли вы значения здесь
Теперь в “checkbox” вы получите массив значений выбранных чекбоксов. Теперь вы можете передать его в AJAX функцию как данные
.
Ответ или решение
Чтобы отправлять значения чекбокса на электронную почту в WordPress, следует правильно настроить HTML-форму, JavaScript и PHP/AJAX функцию. Рассмотрим каждый этап подробнее:
Шаг 1: Исправление HTML
Во-первых, избегайте использования одинакового id
для нескольких элементов, заменив его на класс. Это улучшает доступность и соответствие стандартам HTML.
<?php
for($i=$start; $i < $end; ++$i) {
if($emails[$i] != "") {
$userId = $emails[$i]['ID'];
$user_info = get_users($userId);
echo '<tr class="iedit alternate">
<td class="name column-name" style="border:1px solid #DBDBDB;padding-left:13px;">
<input type="checkbox" class="haet_mail_test_address" name="ckboxs[]" value="'.$emails[$i]["user_email"].'"> '.$emails[$i]['user_email'].'
</td>';
echo '<td class="name column-name" style="border:1px solid #DBDBDB;">'.$user_info->user_login.'</td>';
echo '</tr>';
}
}
?>
<button class="button-primary" id="haet_mail_test_submit" name="submit" type="submit">Send Email</button>
<div id="haet_mail_test_sent" class="haet-mail-dialog" title="<?php _e('Email sent', 'wp-html-mail'); ?>">
<p><?php _e('Your message has been sent.', 'wp-html-mail'); ?></p>
</div>
Шаг 2: JavaScript для сбора значений чекбоксов
Используйте класс для получения выбранных значений чекбоксов и создайте массив, который затем можно передать вместе с AJAX-запросом.
$('#haet_mail_test_submit').click(function(event) {
event.preventDefault(); // Предотвращение стандартной отправки формы
var checkboxValues = $(".haet_mail_test_address:checked").map(function(){
return $(this).val();
}).get();
console.log(checkboxValues); // Проверка получения значений
$.post(ajaxurl, { action: 'haet_mail_send_test', checkbox: checkboxValues }, function(response) {
$("#haet_mail_test_sent").dialog({
dialogClass: "no-close",
modal: true,
buttons: [
{
text: "OK",
click: function() {
$(this).dialog("close");
}
}
]
});
});
});
Шаг 3: Обработка AJAX-запросом в PHP
Настройте вашу PHP-функцию так, чтобы она могла обрабатывать массив полученных данных.
function send_test() {
if (!empty($_POST['checkbox']) && is_array($_POST['checkbox'])) {
$emails = $_POST['checkbox'];
foreach ($emails as $email) {
echo $email; // Вывод для отладки
wp_mail($email, 'Message Subject', 'Message Body'); // Необходимо добавить тему и тело письма
}
} else {
echo "No email selected.";
}
wp_die(); // Всегда завершайте AJAX-процедуру этой функцией
}
Итог
Применение описанных техник позволит успешно отправлять значения выбранных чекбоксов на указанные адреса электронной почты. Обратите внимание на необходимость добавления субъектов и тела сообщения в функцию wp_mail
.
SEO-Оптимизация
Убедитесь, что ваши статьи и описания формы содержат релевантные ключевые слова, такие как “отправка email через чекбокс”, “WordPress AJAX mail” для улучшения индексации и привлечения новых пользователей.
Обратите Внимание
Будьте аккуратны с безопасностью, всегда проверяйте и очищайте пользовательские данные, чтобы предотвратить возможные уязвимости.