Vyvíjím web wordpress pomocí vlastních šablon / motivů, ale mám problémy. Chci použít Ajax k volání funkce, když uživatel klikne na tlačítko. Na jedné stránce mám takové tlačítko:

<p class="form-submit"> <input name="message_read" type="submit" class="submit button mark-as-read" value= "Mark as read" /> </p> 

A mám takovou funkci jQuery / 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", }, success: function (output) { console.log(output); } }); }); }); 

Výše uvedená funkce žije v wp-content/themes/my-theme/js/wp_ajax_calls.js. Přidal jsem skript na web takto:

1) Přidal jsem to do svého souboru functions.php:

wp_enqueue_script( "ajax calls", get_template_directory_uri() ."/js/wp_ajax_calls.js", array("jquery"), "1.0", true); 

2) Do záhlaví jsem vložil skript.

<script type="text/javascript" src="https://mysite//wp-content/themes/twentyfifteen/js/wp_ajax_calls.js"></script> 

Když kliknu na tlačítko tak, jak je, zobrazí se příkaz console.log. Podle mého chápání chci, aby moje funkce ajax volala funkci php, která mi umožní používat $ wpdb. Mám to v functions.php:

function mark_message_as_read() { global $wpdb; // do stuff. } 

Toto je místo, kde jsem zmatený. Mám dvě hlavní otázky:

1) Myslím, že někde nějaké add_action () mám mít, ale nevím, kam dát je a já také nevím, jaký hák bych měl použít.

2) Navíc Chci mít možnost předat data (ID zprávy) funkci php pro můj dotaz db. Jak mohu předat argument této funkci?

Nechci používat něco jako if( isset($_POST["message_whatever"]) ) twentyfifteen_message_whatever(); kvůli způsobu, jakým mám nastaveny zprávy.

Rádi v případě potřeby poskytnu další informace. Za vaši pomoc předem děkujeme !!

Komentáře

Odpověď

  1. Vytvořte podřízený motiv, s nímž si nebudete hrát kód stávajícího motivu, protože při příští aktualizaci motivu můžete přijít o všechny změny (viz Podřízené motivy )

  2. Zde je postup, jak předat hodnoty vašemu požadavku 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); } }); }); }); 

Můžete provést průzkum také na Nonces přidáte do své aplikace vrstvu zabezpečení: https://codex.wordpress.org/WordPress_Nonces

  1. Nakonec kód PHP pro zpracování požadavku (i zde byste měli zpracovat nonce ve skutečném kódu):

    // 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 */]); } 

Komentáře

  • Moc děkuji! ' Určitě se podívám také na nonces. : D

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *