Je développe un site wordpress en utilisant des modèles / thèmes personnalisés, mais je « m ai difficulté. Je souhaite utiliser Ajax pour appeler une fonction lorsquun utilisateur clique sur un bouton. Sur une page, jai un bouton comme celui-ci:
<p class="form-submit"> <input name="message_read" type="submit" class="submit button mark-as-read" value= "Mark as read" /> </p>
Et jai une fonction jQuery / Ajax comme celle-ci:
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 fonction ci-dessus réside dans wp-content/themes/my-theme/js/wp_ajax_calls.js
. Jai ajouté le script au site comme ceci:
1) Jai ajouté ceci à mon fichier functions.php:
wp_enqueue_script( "ajax calls", get_template_directory_uri() ."/js/wp_ajax_calls.js", array("jquery"), "1.0", true);
2) Jai inclus le script dans len-tête.
<script type="text/javascript" src="https://mysite//wp-content/themes/twentyfifteen/js/wp_ajax_calls.js"></script>
Lorsque je clique sur le bouton tel quel, linstruction console.log apparaît. À ma connaissance, je veux que ma fonction ajax appelle une fonction php qui me permettra dutiliser $ wpdb. Jai ceci dans functions.php:
function mark_message_as_read() { global $wpdb; // do stuff. }
Cest là que je suis confus. Jai deux questions principales:
1) Je pense que je suis censé avoir des add_action () « quelque part, mais je ne sais pas où aller mettez-les et je ne sais pas non plus quel crochet je devrais utiliser.
2) De plus, Je veux pouvoir transmettre des données (lidentifiant du message) à la fonction php pour ma requête db. Comment passer un argument à cette fonction?
Je ne veux pas utiliser quelque chose comme if( isset($_POST["message_whatever"]) ) twentyfifteen_message_whatever();
à cause de la façon dont jai configuré les messages.
Heureux de fournir plus dinformations si nécessaire. Merci davance pour votre aide !!
Commentaires
- Veuillez consulter la documentation .
Réponse
-
Créez un thème enfant pour ne pas jouer avec le code dun thème existant car la prochaine fois que vous mettrez à jour le thème, vous risquez de perdre toutes vos modifications (voir Thèmes enfants )
-
Voici comment transmettre des valeurs à votre requête 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); } }); }); });
Vous pouvez faire quelques recherches sur Nonces également, pour ajouter une couche de sécurité à votre application: https://codex.wordpress.org/WordPress_Nonces
-
Enfin, le code PHP pour gérer la requête (ici aussi vous devez gérer le nonce dans le code réel):
// 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 */]); }
Commentaires
- Merci beaucoup! Je ' Je vais certainement aussi jeter un œil aux nonces. : D