Ich entwickle eine WordPress-Site mit benutzerdefinierten Vorlagen / Themen, aber ich habe Ärger. Ich möchte Ajax verwenden, um eine Funktion aufzurufen, wenn ein Benutzer auf eine Schaltfläche klickt. Auf einer Seite habe ich eine Schaltfläche wie folgt:
<p class="form-submit"> <input name="message_read" type="submit" class="submit button mark-as-read" value= "Mark as read" /> </p>
Und ich habe eine jQuery / Ajax-Funktion wie diese:
jQuery(document).ready(function() { jQuery(".mark-as-read").click(function () { console.log("The function is hooked up"); jQuery.ajax({ type: "POST", url: "/wp-admin/admin-ajax.php", data: { action: "mark_message_as_read", }, success: function (output) { console.log(output); } }); }); });
Die obige Funktion befindet sich in wp-content/themes/my-theme/js/wp_ajax_calls.js
. Ich habe das Skript folgendermaßen zur Site hinzugefügt:
1) Ich habe es zu meiner Datei functions.php hinzugefügt:
wp_enqueue_script( "ajax calls", get_template_directory_uri() ."/js/wp_ajax_calls.js", array("jquery"), "1.0", true);
2) Ich habe das Skript in den Header aufgenommen.
<script type="text/javascript" src="https://mysite//wp-content/themes/twentyfifteen/js/wp_ajax_calls.js"></script>
Wenn ich unverändert auf die Schaltfläche klicke, wird die Anweisung console.log angezeigt. Nach meinem Verständnis möchte ich, dass meine Ajax-Funktion eine PHP-Funktion aufruft, mit der ich $ wpdb verwenden kann. Ich habe dies in functions.php:
function mark_message_as_read() { global $wpdb; // do stuff. }
Hier werde ich verwirrt. Ich habe zwei Hauptfragen:
1) Ich denke, ich sollte irgendwo add_action () haben, aber ich weiß nicht, wohin Setzen Sie sie und ich weiß auch nicht, welchen Haken ich verwenden soll.
2) Zusätzlich Ich möchte in der Lage sein, Daten (die Nachrichten-ID) für meine Datenbankabfrage an die PHP-Funktion zu übergeben. Wie übergebe ich ein Argument an diese Funktion?
Ich möchte nicht so etwas wie if( isset($_POST["message_whatever"]) ) twentyfifteen_message_whatever();
verwenden, da ich Nachrichten eingerichtet habe.
Gerne geben wir bei Bedarf weitere Informationen an. Vielen Dank im Voraus für Ihre Hilfe!
Kommentare
- Bitte lesen Sie die Dokumentation .
Antwort
-
Erstellen Sie ein untergeordnetes Thema, damit Sie sich nicht damit anlegen Der Code eines vorhandenen Themas, da Sie beim nächsten Aktualisieren des Themas möglicherweise alle Änderungen verlieren (siehe Untergeordnete Themen )
-
So übergeben Sie Werte an Ihre Ajax-Anfrage:
jQuery(document).ready(function() { jQuery(".mark-as-read").click(function () { console.log("The function is hooked up"); jQuery.ajax({ type: "POST", url: "/wp-admin/admin-ajax.php", data: { action: "mark_message_as_read", // add your parameters here message_id: $(".your-selector").val() }, success: function (output) { console.log(output); } }); }); });
Sie können Nachforschungen anstellen Auch bei Nonces, um Ihrer App eine Sicherheitsebene hinzuzufügen: https://codex.wordpress.org/WordPress_Nonces
-
Schließlich der PHP-Code zur Bearbeitung der Anfrage (auch hier sollten Sie die Nonce im realen Code behandeln):
// register the ajax action for authenticated users add_action("wp_ajax_mark_message_as_read", "mark_message_as_read"); // register the ajax action for unauthenticated users add_action("wp_ajax_nopriv_mark_message_as_read", "mark_message_as_read"); // handle the ajax request function mark_message_as_read() { $message_id = $_REQUEST["message_id"]; // add your logic here... // in the end, returns success json data wp_send_json_success([/* some data here */]); // or, on error, return error json data wp_send_json_error([/* some data here */]); }
Kommentare
- Vielen Dank! Ich ' werde auf jeden Fall auch Nonces betrachten. : D