Ich bin hier total verloren. Kann jemand überprüfen, was mit dem Formular, das ich hier zu erstellen versuche, schief geht? Es sollte Daten mit Ajax im benutzerdefinierten WP-Design senden, ohne etwas in der DB zu erzählen.
Die Konsole gibt mir einen Fehler, dass “firstname is not defined”, Zeile 67 von jQuery – data:{name:firstname, email:email, message:comment,action:'validate_form'}
aber wirklich, ich glaube, es wird mehr als das sein.
<form class="form">
<div class="form__item form__item_no-margin">
<input type="text" name="firstname" placeholder="What's your name?*" class="firstname" required>
<p class="error-message">This is field is required!</p>
</div>
<div class="form__item">
<input type="text" name="email" placeholder="What's your email address?*" class="email" required>
<p class="error-message">This is field is required!</p>
</div>
<div class="form__item">
<textarea name="comment" placeholder="Please, leave a message!*" class="textarea" required></textarea>
<p class="error-message">This is field is required!</p>
</div>
<div class="form__item">
<input type="button" name="submit" value="Send" class="submit-btn">
<p class="error-message error-message_main val-error">All the required fields have to be filled out.</p>
<p class="success-message val-success">Thanks. I'll contact you ASAP!</p>
</div>
</form>
Und etwas jQuery:
jQuery(document).ready(function(){
jQuery(".submit-btn").click(function(e){
e.preventDefault();
var name = jQuery(".firstname").val();
var email = jQuery(".email").val();
var message = jQuery(".textarea").val();
var ajaxUrl = "/wp-admin/admin-ajax.php";
if(name === "" || email === "" || message === "") {
jQuery(".val-error, .error-message").show();
jQuery("html, body").animate({
scrollTop: jQuery(".val-error").offset().top
}, 700)
}
else {
jQuery.ajax({
url: ajaxUrl,
method:"POST",
data:{name:firstname, email:email, message:comment,action:'validate_form'},
success: function(data) {
jQuery("form").trigger("reset");
jQuery(".val-success").show(fast);
}
});
}
});
});
PHP in der Datei functions.php:
add_action('wp_ajax_myaction', 'my_action_callback');
add_action('wp_ajax_nopriv_myaction', 'my_action_callback');
function my_action_callback(){
$name= trim($_POST["firstname"]);
$email = trim($_POST["email"]);
$comment = trim($_POST["comment"]);
$page_title = "New form submission";
$message = "Name: $name \nEmail: $email \nMessage: $comment";
mail('[email protected]', $page_title, $message, "Content-type: text/plain; charset=\"utf-8\"\n From: [email protected]" );
wp_die();
}
AKTUALISIEREN
Beigefügt ist die frische Version in Codepen. PHP ist unten.
https://codepen.io/anon/pen/RVWaJY
add_action('wp_ajax_myaction', 'validate_form_callback');
add_action('wp_ajax_nopriv_myaction', 'validate_form_callback');
function validate_form_callback(){
$name= trim($_POST["firstname"]);
$email = trim($_POST["email"]);
$comment = trim($_POST["comment"]);
$page_title = "New form submission";
$message = "Name: $name \nEmail: $email \nMessage: $comment";
mail('[email protected]', $page_title, $message, "Content-type:
text/plain; charset=\"utf-8\"\n From: [email protected]" );
wp_die();
}
Es gibt buchstäblich Tausende von Tutorials zu Ajax in WordPress. Ich habe es sogar hier gemacht: stackoverflow.com/questions/31587210/…. Erstmal nie anrufen
ajaxurl
dieser Weg. Lokalisieren Sie es. Zweitens, wo ist Ihre Variablefirstname
in demdata
Objekt? Und schließlich, warum benutzt du nicht$
anstatt überall einzuklebenjQuery
. Fügen Sie es einfach in Ihr ` jQuery(document).ready(function($){. Is your jquery in a separate script, dependent on
jQuery`?– dingo_d
17. April 2017 um 6:18 Uhr
Hey Kumpel. Danke für deine Antwort. Die Sache ist, dass ich kein Techniker bin. Ich habe buchstäblich 3 Tage gebraucht, um den Code, den ich oben eingereicht habe, zumindest mit der Validierung zum Laufen zu bringen. Jetzt bin ich an dem Punkt, an dem ich nicht weiß, wohin ich gehen soll. Deshalb bitte ich um Hilfe. Codex-Dokumentation für WP wird mir überhaupt nicht helfen.
– zametsv
18. April 2017 um 1:22 Uhr
@zametsv – was ist jetzt das eigentliche Problem? (CodePen zeigt nur an, dass kein jQuery vorhanden ist und daher nicht funktioniert)
– bestesProgrammderWelt
18. April 2017 um 5:10 Uhr
@bestprogrammerintheworld Das Problem ist jetzt, dass, obwohl ich Daten in Formularfeldern habe, sie immer noch mit einer Fehlermeldung validiert werden, wenn nichts vorhanden ist. Und es sendet keine Daten an die angegebene E-Mail-Adresse in PHP.
– zametsv
19. April 2017 um 2:08 Uhr