Cum să faci un apel AJAX într-un fișier de plugin WordPress
Sunt foarte nou în utilizarea AJAX cu WordPress. Aici obțin valoarea unei opțiuni selectate în var test
folosind funcția de mai jos. Când o afișez cu alert, arată valoarea corectă.
Trebuie să trimit această valoare var test
folosind AJAX și vreau să o obțin într-o variabilă PHP.
Deci am nevoie să apelez AJAX și să obțin valoarea variabilei script var test
în PHP în fișierul de plugin unde am atât funcția cât și caseta de selectie.
Funcție jQuery:
jQuery("#time_slot").change(function()
{
var test= time_slot.value;
alert(test);
});
Caseta de selectie:
<select name="time_slot" id="time_slot" class="time_slot">
<option value="">Alege o oră</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>

Folosește acțiunile Ajax integrate în WordPress:
Codul tău jQuery va arăta astfel:
$('#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;
Codul plugin-ului tău va arăta cam așa:
add_action("wp_ajax_MyPlugin_GetVars", "MyPlugin_GetVars");
add_action("wp_ajax_nopriv_MyPlugin_GetVars", "MyPlugin_GetVars");
function MyPlugin_GetVars(){
global $wpdb;
// folosește $wpdb pentru inserarea datelor
//Fă aici ce trebuie cu Ajax
// Ai putea folosi include('/wp-content/plugins/test/getvars.php') dar ar fi mai bine
// să eviți asta și să muți codul în această funcție
}
Pentru mai multe informații, vizitează AJAX în Plugin-uri

te rog să te uiți mai jos, poate te va ajuta. Aici este codul tău 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;
}
Și aici este codul tău JS. Trebuie să creezi un nou fișier JS și să pui codul de mai jos în acest fișier.
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("Error");
}
});
return false;
});
});
Pentru mai multe detalii, poți verifica aici

ce să fac cu acest /your-plugin-name/js/my-ajax.js poți să elaborezi

Trebuie să pui codul tău JS în my-ajax.js (numele fișierului js). Deci "/your-plugin-name/js/my-ajax.js" va fi calea către fișierul JS.

booking.php este numele fișierului unde primesc valoarea Jqery pe care trebuie să o trimit prin apel ajax deci unde voi pune această funcție ajax_enqueuescripts() { și pot crea fișierul ja sub fișierul booking.php și pot pune numele acelui fișier js în

primesc eroare arse error: syntax error, unexpected T_STRING, expecting T_FUNCTION pe această linie de hook add_action('wp_enqueue_scripts', ajax_enqueuescripts);

am făcut tot ce ai spus în răspuns dar primesc eroarea de mai sus

Folosesc același cod ca mai sus pe care l-am postat, dar funcționează bine pentru mine.

când adaug acțiunile de hooks în partea de sus nu apare nicio eroare dar apelul ajax nu funcționează verifică linkul și evită opțiunea Gender nu este în folosință selectează direct calendarul și apoi ora http://test.skovian.com/thefoodieclub.com/dine/dine/lunch-at-olive-bistro/

nu am primit comentariul tău poți comenta din nou pe site-ul de administrare

Salut Sanjay, te rog să îmi iei fișierul cu pluginurile de aici

Și despre acel comentariu de pe site-ul de administrare, te rog să-l ignori.

pluginul meu folosește deja aceste hook-uri: add_action( 'admin_enqueue_scripts', array(&$this, 'my_enqueue_scripts_css' )); add_action( 'admin_enqueue_scripts', array(&$this, 'my_enqueue_scripts_js' ));

Unde ai afișat caseta de selectare în partea de administrare sau pe partea frontală?

Adaugă acest cod în pagina PHP a pluginului tău
add_action("wp_ajax_ajax_plugin_call", "ajax_plugin_call_callback");
add_action("wp_ajax_nopriv_ajax_plugin_call", "ajax_plugin_call_callback");
Funcția Ajax în pagina PHP
function ajax_plugin_call_callback() {
global $wpdb;
print_r($_POST);
// scrie aici codul tău PHP
die();
}
Codul tău JavaScript ar trebui să arate astfel
jQuery(document).ready(function(){
jQuery('#formID').bind('submit', function() { // Butonul de trimitere a formularului
var form_value = jQuery('#formID');
var form_data = form_value.serialize(); // Serializează formularul
form_data['action'] = 'ajax_plugin_call'; // Acțiunea
jQuery.post('<?php echo admin_url('admin-ajax.php'); ?>', form_data, function(response){
// Aici vei primi răspunsul Ajax
});
}
});
Verifică acest exemplu, te va ajuta să implementezi apeluri Ajax în WordPress prin intermediul unui plugin.

Mulțumesc pentru răspuns, dar te rog să elaborezi. Răspunsul tău este considerat dumping de cod.

@engelen hei, am folosit ajax astfel: var data = { current_datedddd: sdfdsfsdf, post_id: "'.$duplicate_of.'", action: "call_addon_price1" '.$attribute_fields_str.' }; alert(sdfdsfsdf); trimite valoarea timpului la postare, dar în funcția action: "call_addon_price1" nu reușesc să stochez în variabilă folosind POST

@engelen poți verifica apelul meu ajax http://test.skovian.com/thefoodieclub.com/dine/dine/lunch-at-olive-bistro/

Te rog să încerci asta 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(){
încearcă asta în plugin-ul tău
print_r($_POST);
die;
}

Am folosit codul de mai jos pentru a face un apel AJAX și funcționează bine. Aici trimit variabila time
către această pagină folosind 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);
}
);
});
Fișierul meu gettime.php arată astfel și primește răspunsul de la apelul meu AJAX.
<?php session_start();
echo $name= $_POST["name"];
file_put_contents("name.txt", $name)
?>

Mai întâi trebuie să încărci scriptul și să definești URL-ul. Apoi trebuie să creezi o funcție pentru callback-ul tău AJAX și să adaugi o acțiune WordPress care să o apeleze. Iată un videoclip în care explic procesul, sper să te ajute. :)
