Dezvolt un site wordpress folosind șabloane / teme personalizate, dar am necaz. Vreau să folosesc Ajax pentru a apela o funcție atunci când un utilizator face clic pe un buton. Pe o pagină, am un buton de genul:

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

Și am o funcție jQuery / Ajax de genul acesta:

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); } }); }); }); 

Funcția de mai sus trăiește în wp-content/themes/my-theme/js/wp_ajax_calls.js. Am adăugat scriptul pe site așa:

1) Am adăugat acest lucru în fișierul meu functions.php:

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

2) Am inclus scriptul în antet.

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

Când fac clic pe butonul așa cum este, se afișează instrucțiunea console.log. Din câte înțeleg, vreau ca funcția mea ajax să apeleze o funcție php care să mă permită să folosesc $ wpdb. Am acest lucru în functions.php:

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

Aici mă confund. Am două întrebări principale:

1) Cred că ar trebui să am unele add_action () „undeva, dar nu știu unde să pune-le și, de asemenea, nu știu ce cârlig ar trebui să folosesc.

2) În plus, Vreau să pot transmite date (ID-ul mesajului) funcției php pentru interogarea mea db. Cum transmit un argument funcției respective?

Nu vreau să folosesc ceva de genul if( isset($_POST["message_whatever"]) ) twentyfifteen_message_whatever(); din cauza modului în care am configurat mesajele.

Vă bucur să vă ofer mai multe informații, dacă este necesar. Vă mulțumim anticipat pentru ajutor !!

Comentarii

Răspuns

  1. Creați o temă copil pentru a nu vă încurca cu codul unei teme existente, deoarece data viitoare când veți actualiza tema, puteți pierde toate modificările dvs. (consultați Teme pentru copii )

  2. Iată cum să transmiteți valorile cererii dvs. 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); } }); }); }); 

Puteți face unele cercetări și pe Nonces, pentru a adăuga un strat de securitate aplicației: https://codex.wordpress.org/WordPress_Nonces

  1. În cele din urmă, codul PHP pentru a gestiona solicitarea (și aici ar trebui să gestionați nonce-ul în codul real):

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

Comentarii

  • Vă mulțumesc foarte mult! ' cu siguranță voi arunca și o privire la nonces. : D

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *