Как вызвать wp_mail из HTML?

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

Мне нужно использовать wp_mail, так как мне нужно передать PHP-переменные (email, body AND) в электронное письмо.

Насколько я понял, я правильно настроил форму, но после небольшого поиска я узнал, что использование JQuery (AJAX специально) было лучшим / единственным способом сделать это, но я понятия не имею, как все это работает.

Я надеюсь, что кто-то здесь сможет объяснить это мне, чтобы я мог как можно быстрее выполнить эту работу.

В моем shortcode это добавляется на страницу (игнорируйте функцию скрипта, неудачную попытку):

<div class="downloadHolder"> <h3>Download</h3> <p style="margin-bottom: 20px;">Please note: FTB files can only be used if you have Free The Blobs on Android or iOS.</p> <a href="<?php echo $intro;?>" download="<?php echo basename($intro) ?>" class="demoBtn">Download for PC</a> <!--<a href="#" class="demoBtn">Demo</a>--><br> <input type="text" name="emailValue" placeholder="Email Address" class="emailInput" style="text-align: center;"> <br><span>(We do NOT collect email addresses.)</span><br><br> <button onclick="echoSendMail()" class="downloadBtn" style="width: 100% !important;">Email for Mobile</button> </div> <script> function echoHello(){ alert("<?PHP emailSend(); ?>"); } </script> 

И позже в том же php-файле у меня есть эта функция ($ intro – это URL-адрес загруженного файла (вложение)):

 function emailSend(){ $to = $_GET['emailValue']; $subject = 'Download for'.basename($intro); $msg = 'Your download for'.basename($intro).'is attached to this email.'; $headers = 'From: My Name <myname@mydomain.com>' . "\r\n"; $mail_attachment = array(get_post_meta($post -> ID, $key = 'podcast_file', true)); wp_mail($to, $subject, $msg, $headers, $mail_attachment); } 

Solutions Collecting From Web of "Как вызвать wp_mail из HTML?"

Сначала способ сделать это с помощью формы, использующей метод post , немного легче понять:

 <!-- form with AJAX action and iframe target --> <form method="post" action="<?php echo admin_url('admin-ajax.php'); ?>" target="emailsendframe"> <!-- AJAX action field to trigger function--> <input type="hidden" name="action" value="download_email_send"> <!-- Post ID field --> <input type="hidden" name="intro" value="<?php echo basename($intro); ?>"> <input type="hidden" name="postId" value="<?php echo $post->ID; ?>"> <input type="submit" class="downloadBtn" value="Download"> </form> <!-- iframe for submitting to --> <iframe name="emailsendframe" id="emailsendframe" src="javascript:void(0);" style="display:none;"></iframe> 

Конечно, вы можете сделать то же самое в javascript-функции с get , но вам нужно будет добавить id к элементу ввода электронной почты, чтобы вы могли легко добавить его … (Предостережение, если у вас несколько кнопок загрузки на одном и том же эта страница не будет работать, так как id должен быть уникальным, вам нужно будет добавить больше кода, чтобы сделать это.)

 <!-- note id attribute is added --> <input type="text" name="emailValue" id="emailValue" placeholder="Email Address" class="emailInput" style="text-align: center;"> <!-- button can stay as you have it --> <button onclick="emailsend();" class="downloadBtn">Download</button> <!-- get method AJAX email send script --> <script>function emailsend() { emailvalue = document.getElementById('emailValue').value; email = encodeURIComponent(emailvalue); intro = encodeURIComponent('<?php echo basename($intro); ?>'); downloadurl = '<?php admin_url('admin-ajax.php'); ?>?action=download_email_send&postId=<?php echo $post->ID; ?>&emailValue='+email+'&intro='+intro; document.getElementById('emailsendframe').src = downloadurl; }</script> <!-- iframe for submitting to --> <iframe name="emailsendframe" id="emailsendframe" src="javascript:void(0);" style="display:none;"></iframe> 

Затем в вашей функции function.php (или в плагине или в папке mu-plugins) добавьте соответствующую функцию AJAX, добавив в wp_ajax_ значение запроса action к wp_ajax_ (для зарегистрированных пользователей) и / или wp_ajax_nopriv_ (анонимные пользователи):

 // AJAX trigger for download_email_send action add_action('wp_ajax_download_email_send','download_email_send'); add_action('wp_ajax_nopriv_download_email_send','download_email_send'); // note $_REQUEST will work with $_POST or $_GET methods function download_email_send() { $to = $_REQUEST['emailValue']; // preferably add some email address format validation here // $validate = some_email_validate_function($to); // if ($validated) {$message = 'Please check your email for typos.';} // else { $post_id = $_REQUEST['postID']; // ! you would need to redefine $intro here ! $subject = 'Download for '.$_REQUEST['intro']; $msg = 'Your download for '.$_REQUEST['intro'].' is attached to this email.'; $headers = 'From: My Name <myname@mydomain.com>' . "\r\n"; $mail_attachment = array(get_post_meta($post_id, 'podcast_file', true)); $send = wp_mail($to, $subject, $msg, $headers, $mail_attachment); if ($send) {$message = 'Success! Check you email address.';} else {$message = 'Error: Mail sending failed.';} // } // alert the user to the result echo "<script>alert('".$message."');</script>"; exit; }