Verwenden von Ajax in WordPress zum Senden von E-Mails
Lesezeit: 6 Minuten
Majo0od
Ich versuche, Ajax zu verwenden, um eine E-Mail über ein von mir erstelltes Webformular zu senden, aber ich bin verloren. Ich habe keine Ahnung, wie Ajax in WordPress funktioniert.
Zuerst müssen Sie zwei Aktionen hinzufügen, eine für den nicht angemeldeten Benutzer, die ausdrücklich erforderlich ist, damit es funktioniert, zum Beispiel so etwas (Grundsätzlich in Ihrer functions.php Datei):
Dann müssen Sie die Anfrage an die stellen admin-ajax.php also im jQuery Funktion können Sie so etwas verwenden:
$("#contact-send").click(function(e){
e.preventDefault(); // if the clicked element is a link
//...
var data = { 'action':'siteWideMessage', 'more':'values' };
$.post('<?php echo admin_url('admin-ajax.php'); ?>', data, function(response) {
console.log(response);
});
});
Stellen Sie sicher, dass Sie setzen exit/die am Ende deines handler Serverseitig zum Beispiel:
function wpse_sendmail()
{
// Process the post data...
if(wp_mail(...)) {
echo 'success';
}
else {
echo 'failed';
}
die();
}
In deiner success Rückruf, der response Variable erhält die von der Serverseite gesendete Antwort, dh success/failed. Es gibt bessere Möglichkeiten, dies zu tun (Using wp_localize_script etc). Lesen diesen ausführlichen Artikel. Auch wenn Sie a zurückgeben möchten json Antwort dann können Sie verwenden $.json('url', data, func).
Wenn Sie verwirrt sind, lassen Sie mich Ihnen sagen, dass Sie die Anfrage stellen sollten admin-ajax.php und passieren die action mit der Anfrage und in diesem Fall ist es siteWideMessageAlso WordPress werde die anrufen handler das ist mit registriert add_action Haken und in Ihrem Fall ist es wpse_sendmail.Eid Mubarak 🙂
Hast du den Code eingefügt $("#contact-send").click(function(){...});
– Das Alpha
6. Oktober 2014 um 17:28 Uhr
Stellen console.log('clicked') innerhalb des Click-Handlers zuvor e.preventDefault() um sicherzustellen, dass der Handler ausgelöst wird, und überprüfen Sie die Konsole auf andere Fehler.
– Das Alpha
7. Oktober 2014 um 1:15 Uhr
Ich glaube, ich weiß, was das Problem ist. Der Link admin-ajax.php kann nicht erreicht werden. Mein JS befindet sich in einer JS-Datei, nicht in derselben Datei wie meine PHP-Funktionen.
– Majo0od
7. Oktober 2014 um 12:16 Uhr
Also habe ich noch ein wenig getestet. Die Site antwortet mit dem HTML der Seite mit dem console.log(response); Ich bin mir nicht sicher, was das bedeutet.
– Majo0od
7. Oktober 2014 um 12:40 Uhr
Was Sie als bekommen HTML ? Das echo sollte Antwort sein.
– Das Alpha
7. Oktober 2014 um 13:53 Uhr
Ich musste etwas anders machen, damit das funktioniert.
Zuerst habe ich eine versteckte Eingabe auf meiner Vorlagenseite hinzugefügt und ihr den Wert der Ajax-URL wie folgt gegeben:
Und meine js in einer separaten js-Datei als solche:
$("#submit-form").click(function(e){
e.preventDefault(); // if the clicked element is a link
$.post($("#ajax_url").val(), {
action: 'siteWideMessage',
// and the rest
}, function(response) {
// handle a successful response
console.log(response)
});
});
Das funktioniert für mich.
Überdenken Sie dies, da diese Lösung immer noch funktioniert. Sollte höher sein. Schritte, die ich unternommen habe, damit es funktioniert: jquery in meiner jQuery auf der Seite platziert, das versteckte Feld auf der Seite und zu den Funktionen hinzugefügt und funktioniert – im Gegensatz zu vielen anderen längeren AJAX-Methoden. Dies funktioniert, um Ihre “Echo”-Nachricht zurückzugeben, was bedeutet, dass sie ausgelöst wird. 10000% empfehlen.
– Ivandude
21. September 2021 um 15:15 Uhr
Ein Blick in die Dokumentation für wp_ajax_(aktion)es sieht so aus, als müssten Sie einfach die festlegen action Parameter zu “siteWideMessage”. Zum Beispiel…
$.post(<?= json_encode(admin_url('admin-ajax.php')) ?>, {
action: 'siteWideMessage',
// and the rest
}, function(response) {
// handle a successful response
});
Das bringt mich nicht wirklich dazu, die AJAX-Struktur von WordPress zu verstehen.
– Majo0od
6. Oktober 2014 um 19:25 Uhr
Sie können dies auf WordPress-Weise tun, oder Sie können dies auf einfache Weise tun. Ich würde ein Plugin erstellen, um AJAX-Handling-Code zu speichern.
<?php
/*
Plugin Name: AJAX Receiver
*/
add_action('admin_menu', 'ajax_receiver_menu');
function ajax_receiver_menu() {
$parent_slug = null; // Child of null, so this menu item has no link to it in the dashboard.
$menu_title = "AJAX Receiver menu"; // This menu title will not be visible.
$page_title = "AJAX_Receiver"; // No one will visit this page.
$menu_slug = 'ajax_receiver'; // This is the last part of the URL you post to.
$callback = 'ajax_receiver_menu_content';
add_submenu_page($parent_slug, $page_title, $menu_title, $capability, $menu_slug, $callback);
}
function ajax_receiver_menu_content() {
// check request variables, do other logic.
echo "This is the response to your AJAX request.";
}
Dann können Sie eine normale Post-Anfrage senden.
$.post( "/wp-admin/admin.php?page=ajax_receiver", { siteWideMessage:"null", forwhat: forwhat, name: name, email:email }, function(data){
console.log(data); // You should see "This is the response to your AJAX request." in your console.
});
So “sollten” Sie es definitiv nicht machen, aber ich habe festgestellt, dass es viel einfacher ist, damit zu arbeiten. Der kritische Teil ist, dass das Untermenü nicht weiß, ob es als Antwort auf eine AJAX-Anforderung oder eine normale Seitenanforderung „Dies ist die Antwort auf Ihre AJAX-Anfrage“ ausgibt. Tatsächlich könnten Sie Ihren Browser darauf verweisen "/wp-admin/admin.php?page=ajax_receiver" und Sie würden einfach “Dies ist die Antwort auf Ihre AJAX-Anfrage” in nicht formatiertem Text oben auf Ihrem Bildschirm sehen.
13843300cookie-checkVerwenden von Ajax in WordPress zum Senden von E-Mailsyes
Es sollte sein
action: 'siteWideMessage'
und dieurl
muss sein/wp-admin/admin-ajax.php
– Oh Gott warum
4. Oktober 2014 um 1:57 Uhr
und wo tat
$support
kam sowieso her– Kevin
4. Oktober 2014 um 2:00 Uhr
Was ist los mit
like_escape
? Das wurde verwendet, um SQL zu entkommen– geiler Arsch
4. Oktober 2014 um 2:29 Uhr
Sehen: wordpress.stackexchange.com/questions/18845/…dann: codex.wordpress.org/AJAX_in_Plugins
– PeterKA
6. Oktober 2014 um 19:53 Uhr