Kehitän WordPress-sivustoa käyttämällä mukautettuja malleja / teemoja, mutta minulla on ongelmia. Haluan käyttää Ajaxia kutsumaan toiminnon, kun käyttäjä napsauttaa painiketta. Yhdellä sivulla minulla on tällainen painike:
<p class="form-submit"> <input name="message_read" type="submit" class="submit button mark-as-read" value= "Mark as read" /> </p>
Ja minulla on tällainen jQuery / Ajax-toiminto:
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); } }); }); });
Yllä oleva toiminto asuu wp-content/themes/my-theme/js/wp_ajax_calls.js
-kohdassa. Lisäsin komentosarjan sivustolle näin:
1) Lisäsin tämän toiminnot.php-tiedostooni:
wp_enqueue_script( "ajax calls", get_template_directory_uri() ."/js/wp_ajax_calls.js", array("jquery"), "1.0", true);
2) Lisäsin käsikirjoituksen otsikkoon.
<script type="text/javascript" src="https://mysite//wp-content/themes/twentyfifteen/js/wp_ajax_calls.js"></script>
Kun napsautan painiketta sellaisenaan, console.log-käsky tulee näkyviin. Ymmärtääkseni haluan ajax-funktioni kutsuvan php-toimintoa, joka antaa minun käyttää $ wpdb. Minulla on tämä funktioissa.php:
function mark_message_as_read() { global $wpdb; // do stuff. }
Tässä olen hämmentynyt. Minulla on kaksi pääkysymystä:
1) Luulen, että minulla pitäisi olla joitain add_action () -merkkejä, mutta en tiedä minne laita ne ja en myöskään tiedä mitä koukkua minun pitäisi käyttää.
2) Lisäksi, Haluan pystyä välittämään tietoja (viestin tunnus) db-kyselyni php-funktiolle. Kuinka välitän argumentin tälle funktiolle?
En halua käyttää jotain if( isset($_POST["message_whatever"]) ) twentyfifteen_message_whatever();
, koska olen määrittänyt viestejä.
Annan mielelläni lisätietoja tarvittaessa. Kiitos etukäteen avustasi!
Kommentit
- Katso ohjeet .
Vastaa
-
Luo lapsiteema, jotta et sotkeisi olemassa olevan teeman koodi, koska seuraavan kerran kun päivität teeman, saatat menettää kaikki muutokset (katso Lapsiteemat )
-
Näin välität arvot ajax-pyyntösi:
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); } }); }); });
Voit tehdä jonkin verran tutkimusta myös Nonces-sovelluksessa lisätä suojaustaso sovellukseesi: https://codex.wordpress.org/WordPress_Nonces
-
Lopuksi PHP-koodi pyynnön käsittelemiseksi (myös tässä sinun tulee käsitellä nonce-tosielämän koodi):
// 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 */]); }
Kommentit
- Paljon kiitoksia! ' Tarkastelen ehdottomasti myös ei-muita. : D