Come chiamare Ajax in un file di plugin WordPress
Sono molto nuovo all'uso di Ajax con WordPress. Qui sto ottenendo il valore di un'opzione selezionata in var test
utilizzando la funzione qui sotto. Quando faccio alert, mi mostra il valore corretto.
Questo valore di var test
devo inviarlo usando Ajax e voglio riceverlo in una variabile PHP.
Quindi cosa mi serve per chiamare Ajax e ottenere il valore della variabile script var test
in PHP nel file del plugin dove ho sia la funzione che la select box.
Funzione jQuery.
jQuery("#time_slot").change(function()
{
var test= time_slot.value;
alert(test);
});
Select Box
<select name="time_slot" id="time_slot" class="time_slot">
<option value="">Scegli un orario</option>
<option value="1:00 - 3:00">01:00 AM-03:00 AM</option>
<option value="3:00 - 5:00">03:00 AM-05:00 AM</option>
</select>

Utilizza le azioni Ajax integrate in WordPress:
Il tuo codice jQuery avrà questo aspetto:
$('#ajax_form').bind('submit', function() {
var form = $('#ajax_form');
var data = form.serialize();
data.action = 'MyPlugin_GetVars'
$.post('/wp-admin/admin-ajax.php', data, function(response) {
alert(response);
});
return false;
Il codice del tuo plugin sarà simile a:
add_action("wp_ajax_MyPlugin_GetVars", "MyPlugin_GetVars");
add_action("wp_ajax_nopriv_MyPlugin_GetVars", "MyPlugin_GetVars");
function MyPlugin_GetVars(){
global $wpdb;
// utilizza $wpdb per le tue operazioni di inserimento
// Esegui qui le tue operazioni Ajax
// Potresti fare include('/wp-content/plugins/test/getvars.php') ma sarebbe
// meglio evitarlo e spostare il codice direttamente in questa funzione
}
Per maggiori informazioni visita AJAX nei Plugin

per favore guarda qui sotto, potrebbe esserti utile. Ecco il tuo codice PHP.
<?php
function ajax_enqueuescripts() {
wp_enqueue_script('ajaxloadpost', plugins_url().'/your-plugin-name/js/my-ajax.js', array('jquery'));
wp_localize_script( 'ajaxloadpost', 'ajax_postajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
}
add_action('wp_enqueue_scripts', ajax_enqueuescripts);
add_action('wp_ajax_nopriv_ajax_ajaxhandler', 'my_action_callback' );
add_action('wp_ajax_ajax_ajaxhandler', 'my_action_callback' );
function my_action_callback(){
print_r($_GET);
die;
}
E qui c'è il tuo codice JS. Devi creare un nuovo file JS e inserire il codice qui sotto nel tuo nuovo file JS.
jQuery(document).ready(function(){
jQuery("#time_slot").change(function()
{
var test= time_slot.value;
jQuery.ajax({
type: 'GET',
url: ajax_postajax.ajaxurl,
data: {
action: 'ajax_ajaxhandler',
test : test
},
success: function(data) {
alert(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Errore");
}
});
return false;
});
});
Per maggiori dettagli, puoi controllare qui

cosa fare con questo /your-plugin-name/js/my-ajax.js, puoi elaborarlo

Devi inserire il tuo codice js in my-ajax.js (nome del file js). Quindi "/your-plugin-name/js/my-ajax.js" sarà il percorso del tuo file JS.

booking.php è il nome del file dove sto ottenendo il valore Jqery che devo inviare nella chiamata ajax, quindi dove metterò questa funzione ajax_enqueuescripts() { e posso creare il file js sotto il file booking.php e posso inserire il nome di quel file js in

ricevo l'errore arse error: syntax error, unexpected T_STRING, expecting T_FUNCTION su questa riga di hook add_action('wp_enqueue_scripts', ajax_enqueuescripts);

ho fatto tutto quello che hai detto nella risposta ma ricevo ancora l'errore sopra

Sto usando lo stesso codice che ho postato sopra, ma per me funziona bene.

quando aggiungo gli hook action in alto non mostra alcun errore ma l'ajax non viene chiamato controlla il link ed evita l'opzione Gender non è in uso seleziona direttamente il calendario e poi l'orario http://test.skovian.com/thefoodieclub.com/dine/dine/lunch-at-olive-bistro/

non ho ricevuto il tuo commento puoi commentare di nuovo nel sito admin

Ciao sanjay, per favore prendi il mio file dei plugin da qui

E riguardo a quel commento sul sito admin, per favore ignoralo.

il mio plugin usa già questi hook add_action( 'admin_enqueue_scripts', array(&$this, 'my_enqueue_scripts_css' )); add_action( 'admin_enqueue_scripts', array(&$this, 'my_enqueue_scripts_js' ));

Dove hai visualizzato la tua casella di selezione sul lato amministrativo o sul frontend?

Aggiungi questo nella pagina php del tuo plugin
add_action("wp_ajax_ajax_plugin_call", "ajax_plugin_call_callback");
add_action("wp_ajax_nopriv_ajax_plugin_call", "ajax_plugin_call_callback");
Funzione Ajax nella pagina Php
function ajax_plugin_call_callback{
global $wpdb;
print_r($_POST) ;
// scrivi il tuo codice Php
die;
}
Il tuo codice Javascript sarà così
jQuery(document).ready(function(){
jQuery('#formID').bind('submit', function() { // Pulsante di invio del form
var form_value = jQuery('#formID');
var form_data = form_value.serialize(); // Serializza il Form
form_data['action']='ajax_plugin_call'; // Azione
jQuery.post('<?php echo admin_url('admin-ajax.php'); ?>',form_data,function(response){
// Qui riceverai la risposta Ajax
});
}
});
Controlla questo, ti aiuterà con le chiamate Ajax in WordPress nel plugin.

Grazie per la tua risposta, ma per favore elabora. La tua risposta è considerata un dump di codice.

@engelen hey ho usato ajax come var data = { current_datedddd: sdfdsfsdf, post_id: "'.$duplicate_of.'", action: "call_addon_price1" '.$attribute_fields_str.' }; alert(sdfdsfsdf); sta inviando il valore del tempo ma nella funzione action: "call_addon_price1" non riesco a memorizzarlo in una variabile usando POST

@engelen puoi controllare la mia chiamata ajax http://test.skovian.com/thefoodieclub.com/dine/dine/lunch-at-olive-bistro/

Per favore prova questo add_action("wp_ajax_ajax_call_addon_price1", "call_addon_price1_callback"); add_action("wp_ajax_nopriv_call_addon_price1", "call_addon_price1_callback");
function call_addon_price1_callback(){
prova questo nel tuo plugin
print_r($_POST);
die;
}

Ho chiamato AJAX utilizzando il codice qui sotto e funziona correttamente. Qui sto inviando la variabile time
a questa pagina utilizzando il metodo POST $.post("'. plugins_url().'/woocommerce-booking/gettime.php",
var time=0;
jQuery("#time_slot").change(function()
{
time=time_slot.value;
$.post("'. plugins_url().'/woocommerce-booking/gettime.php",
{name: time},
function(response){
console.log(response);
}
);
});
Il mio file gettime.php sarà simile a quello qui sotto e riceverà la risposta dalla mia chiamata AJAX.
<?php session_start();
echo $name= $_POST["name"];
file_put_contents("name.txt", $name)
?>

Per prima cosa devi accodare lo script e definire l'URL. Poi devi creare una funzione per la tua callback AJAX e aggiungere un'azione di WordPress che la richiami. Ecco un video in cui lo spiego, spero ti aiuti. :)
