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
Sanjay Nakate
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.
Jigar Gorakhiya
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
Sanjay Nakate
primesc eroare arse error: syntax error, unexpected T_STRING, expecting T_FUNCTION pe această linie de hook add_action('wp_enqueue_scripts', ajax_enqueuescripts);
Sanjay Nakate
am făcut tot ce ai spus în răspuns dar primesc eroarea de mai sus
Sanjay Nakate
Folosesc același cod ca mai sus pe care l-am postat, dar funcționează bine pentru mine.
Jigar Gorakhiya
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/
Sanjay Nakate
nu am primit comentariul tău poți comenta din nou pe site-ul de administrare
Sanjay Nakate
Salut Sanjay, te rog să îmi iei fișierul cu pluginurile de aici
Jigar Gorakhiya
Și despre acel comentariu de pe site-ul de administrare, te rog să-l ignori.
Jigar Gorakhiya
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' ));
Sanjay Nakate
Unde ai afișat caseta de selectare în partea de administrare sau pe partea frontală?
Jigar Gorakhiya
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
@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
Sanjay Nakate
@engelen poți verifica apelul meu ajax http://test.skovian.com/thefoodieclub.com/dine/dine/lunch-at-olive-bistro/
Sanjay Nakate
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;
}
Riteshdjoshi
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. :)