it-swarm.com.de

Wie rufe ich wp_mail aus HTML auf?

Dies soll in der nächsten Woche oder so geschehen, aber ich habe große Probleme, die Site dazu zu bringen, E-Mails an eine in einem Eingabefeld angegebene Adresse zu senden.

Ich muss wp_mail verwenden, um PHP-Variablen (E-Mail, Text UND Anhang) an eine E-Mail übergeben zu können.

Ich habe das Formular korrekt eingerichtet, so weit ich sehen kann, aber nach einigem Suchen stellte ich fest, dass die Verwendung von JQuery (speziell AJAX) der beste/einzige Weg ist, dies zu tun, aber ich habe keine Ahnung, wie das alles funktioniert.

Ich hoffe, jemand hier kann mir das erklären, damit ich das so schnell wie möglich zum Laufen bringen kann.

In meinem Shortcode wird dies der Seite hinzugefügt (ignoriere die Skriptfunktion, fehlgeschlagener Versuch):

<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>

Und später in der gleichen PHP-Datei habe ich diese Funktion ($ intro ist die URL zu einer hochgeladenen Datei (der Anhang)):

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 <[email protected]>' . "\r\n";
    $mail_attachment = array(get_post_meta($post -> ID, $key = 'podcast_file', true));
    wp_mail($to, $subject, $msg, $headers, $mail_attachment);
}
1
K.Briggs

Erstens können Sie dies mit einem Formular tun, das die Methode post verwendet. Es ist etwas einfacher zu verstehen:

<!-- 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>

Natürlich können Sie dasselbe in einer JavaScript-Funktion mit get tun, aber Sie müssten dem E-Mail-Eingabeelement eine id hinzufügen, damit Sie es einfach hinzufügen können ... (Das Problem ist, wenn Sie mehrere Download-Schaltflächen auf derselben Seite haben Seite dies wird nicht funktionieren, da id eindeutig sein muss, müssten Sie mehr Code hinzufügen, um es so zu machen.)

<!-- 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>

Fügen Sie dann in der function.php Ihres Themas (oder in einem Plugin- oder Mu-Plugins-Ordner) die entsprechende AJAX -Funktion hinzu, indem Sie den action-Abfragewert an wp_ajax_ (für angemeldete Benutzer) und/oder wp_ajax_nopriv_ (anonyme Benutzer) anhängen. Aktionen in WordPress:

// 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 <[email protected]>' . "\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;
}
2
majick