Jag utvecklar en wordpress-webbplats med hjälp av anpassade mallar / teman, men jag har problem. Jag vill använda Ajax för att ringa en funktion när en användare klickar på en knapp. På en sida har jag en knapp så:
<p class="form-submit"> <input name="message_read" type="submit" class="submit button mark-as-read" value= "Mark as read" /> </p>
Och jag har en jQuery / Ajax-funktion så här:
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); } }); }); });
Funktionen ovan lever i wp-content/themes/my-theme/js/wp_ajax_calls.js
. Jag lade till skriptet på webbplatsen så här:
1) Jag lade till detta i mina funktioner. Php-fil:
wp_enqueue_script( "ajax calls", get_template_directory_uri() ."/js/wp_ajax_calls.js", array("jquery"), "1.0", true);
2) Jag inkluderade skriptet i rubriken.
<script type="text/javascript" src="https://mysite//wp-content/themes/twentyfifteen/js/wp_ajax_calls.js"></script>
När jag klickar på knappen som den visas visas console.log-uttalandet. Enligt min förståelse vill jag att min ajax-funktion ska ringa en php-funktion som låter mig använda $ wpdb. Jag har detta i funktioner. Php:
function mark_message_as_read() { global $wpdb; // do stuff. }
Det är här jag blir förvirrad. Jag har två huvudfrågor:
1) Jag tror att jag ska ha några add_action () ”” någonstans, men jag vet inte vart jag ska lägg dem och jag vet inte heller vilken krok jag ska använda.
2) Dessutom, Jag vill kunna skicka data (meddelandets id) till php-funktionen för min db-fråga. Hur skickar jag ett argument till den funktionen?
Jag vill inte använda något som if( isset($_POST["message_whatever"]) ) twentyfifteen_message_whatever();
på grund av hur jag har inställt meddelanden.
Glad att ge mer information om det behövs. Tack på förhand för din hjälp !!
Kommentarer
- Se dokumentationen .
Svar
-
Skapa ett underordnat tema så att du inte röra med koden för ett befintligt tema eftersom nästa gång du kommer att uppdatera temat kan du förlora alla dina ändringar (se Barnteman )
-
Så här skickar du värden till din ajaxförfrågan:
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); } }); }); });
Du kan undersöka på Nonces också, för att lägga till ett säkerhetslager i din app: https://codex.wordpress.org/WordPress_Nonces
-
Slutligen, PHP-koden för att hantera begäran (även här bör du hantera nonce i verkliga livet):
// 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 */]); }
Kommentarer
- Tack så mycket! Jag ' kommer definitivt också att titta på nonces. : D