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

Svar

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

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

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *