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

Réponse

  1. 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 )

  2. 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

  1. 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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *