Sto sviluppando un sito wordpress utilizzando modelli / temi personalizzati, ma ho guaio. Voglio usare Ajax per chiamare una funzione quando un utente fa clic su un pulsante. In una pagina, ho un pulsante così:
<p class="form-submit"> <input name="message_read" type="submit" class="submit button mark-as-read" value= "Mark as read" /> </p>
E ho una funzione jQuery / Ajax come questa:
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); } }); }); });
La funzione precedente risiede in wp-content/themes/my-theme/js/wp_ajax_calls.js
. Ho aggiunto lo script al sito in questo modo:
1) Lho aggiunto al mio file functions.php:
wp_enqueue_script( "ajax calls", get_template_directory_uri() ."/js/wp_ajax_calls.js", array("jquery"), "1.0", true);
2) Ho incluso lo script nellintestazione.
<script type="text/javascript" src="https://mysite//wp-content/themes/twentyfifteen/js/wp_ajax_calls.js"></script>
Quando faccio clic sul pulsante così comè, viene visualizzata listruzione console.log. Per quanto ne so, voglio che la mia funzione ajax chiami una funzione php che mi permetta di usare $ wpdb. Ho questo in functions.php:
function mark_message_as_read() { global $wpdb; // do stuff. }
È qui che mi confondo. Ho due domande principali:
1) Penso che dovrei avere alcune add_action () “da qualche parte, ma non so dove inserirli e non so nemmeno quale hook dovrei usare.
2) Inoltre, Voglio essere in grado di passare i dati (lID messaggio) alla funzione php per la mia query db. Come faccio a passare un argomento a quella funzione?
Non voglio usare qualcosa come if( isset($_POST["message_whatever"]) ) twentyfifteen_message_whatever();
a causa del modo in cui ho impostato i messaggi.
Felice di fornire ulteriori informazioni se necessario. Grazie in anticipo per il tuo aiuto !!
Commenti
- Consulta la documentazione .
Risposta
-
Crea un tema figlio in modo da non scherzare con il codice di un tema esistente perché la prossima volta che aggiornerai il tema, potresti perdere tutte le modifiche (vedi Temi per bambini )
-
Ecco come passare i valori alla tua richiesta ajax:
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); } }); }); });
Puoi fare qualche ricerca anche su Nonces, per aggiungere un livello di sicurezza alla tua app: https://codex.wordpress.org/WordPress_Nonces
-
Infine, il codice PHP per gestire la richiesta (anche qui dovresti gestire il nonce nel codice della vita reale):
// 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 */]); }
Commenti
- Grazie mille! ' darò sicuramente unocchiata anche a nonce. : D