Jeg utvikler et wordpress-nettsted ved hjelp av egendefinerte maler / temaer, men jeg har trøbbel. Jeg vil bruke Ajax til å ringe en funksjon når en bruker klikker på en knapp. På en side har jeg en knapp slik:
<p class="form-submit"> <input name="message_read" type="submit" class="submit button mark-as-read" value= "Mark as read" /> </p>
Og jeg har en jQuery / Ajax-funksjon slik:
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); } }); }); });
Funksjonen ovenfor lever i wp-content/themes/my-theme/js/wp_ajax_calls.js
. Jeg la skriptet til nettstedet slik:
1) Jeg la dette til funksjonene mine. Php-fil:
wp_enqueue_script( "ajax calls", get_template_directory_uri() ."/js/wp_ajax_calls.js", array("jquery"), "1.0", true);
2) Jeg inkluderte skriptet i overskriften.
<script type="text/javascript" src="https://mysite//wp-content/themes/twentyfifteen/js/wp_ajax_calls.js"></script>
Når jeg klikker på knappen som den er, vises console.log-setningen. Etter min forståelse vil jeg at ajax-funksjonen min skal kalle en php-funksjon som lar meg bruke $ wpdb. Jeg har dette i funksjoner. Php:
function mark_message_as_read() { global $wpdb; // do stuff. }
Det er her jeg blir forvirret. Jeg har to hovedspørsmål:
1) Jeg tror jeg skal ha noen add_action () «er et sted, men jeg vet ikke hvor jeg skal legg dem og jeg vet heller ikke hvilken krok jeg skal bruke.
2) I tillegg, Jeg vil være i stand til å overføre data (meldings-id) til php-funksjonen for db-spørringen min. Hvordan sender jeg et argument til den funksjonen?
Jeg vil ikke bruke noe sånt som if( isset($_POST["message_whatever"]) ) twentyfifteen_message_whatever();
på grunn av måten jeg har konfigurert meldinger på.
Glad for å gi mer informasjon om nødvendig. Takk på forhånd for hjelpen !!
Kommentarer
- Se dokumentasjonen .
Svar
-
Lag et barnetema slik at du ikke roter med koden til et eksisterende tema, fordi neste gang du oppdaterer temaet, kan du miste alle endringene (se Barnetemaer )
-
Slik overfører du verdier til ajax-forespørselen din:
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øke noe på Nonces også, for å legge til et sikkerhetslag i appen din: https://codex.wordpress.org/WordPress_Nonces
-
Til slutt, PHP-koden for å håndtere forespørselen (også her bør du håndtere nonce i virkelige livskoden):
// 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
- Tusen takk! Jeg ' Jeg vil definitivt ta en titt på nonces også. : D