Cum să faci un apel AJAX într-un fișier de plugin WordPress

19 iul. 2014, 08:29:51
Vizualizări: 13.5K
Voturi: 0

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>
0
Toate răspunsurile la întrebare 5
1

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

19 iul. 2014 08:40:38
Comentarii

îmi poți spune structura fișierului conform codului întrebării

Sanjay Nakate Sanjay Nakate
19 iul. 2014 08:59:35
14

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

19 iul. 2014 08:53:58
Comentarii

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

Sanjay Nakate Sanjay Nakate
19 iul. 2014 09:17:37

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 Jigar Gorakhiya
19 iul. 2014 09:37:22

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 Sanjay Nakate
19 iul. 2014 09:44:52

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 Sanjay Nakate
19 iul. 2014 09:53:33

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

Sanjay Nakate Sanjay Nakate
19 iul. 2014 09:56:00

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

Jigar Gorakhiya Jigar Gorakhiya
19 iul. 2014 10:07:09

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 Sanjay Nakate
19 iul. 2014 10:20:21

pot să îți trimit fișierul pluginului

Sanjay Nakate Sanjay Nakate
19 iul. 2014 10:23:36

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

Sanjay Nakate Sanjay Nakate
19 iul. 2014 10:27:06

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

Jigar Gorakhiya Jigar Gorakhiya
19 iul. 2014 11:02:57

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

Jigar Gorakhiya Jigar Gorakhiya
19 iul. 2014 11:05:48

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 Sanjay Nakate
19 iul. 2014 11:19:39

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

Jigar Gorakhiya Jigar Gorakhiya
19 iul. 2014 11:39:39

pe site-ul frontal pentru utilizatorii finali

Sanjay Nakate Sanjay Nakate
19 iul. 2014 11:46:36
Arată celelalte 9 comentarii
5

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.

19 iul. 2014 13:32:48
Comentarii

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

engelen engelen
19 iul. 2014 13:54:21

@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 Sanjay Nakate
19 iul. 2014 14:27:35

poți să-mi spui ce este "$attribute_fields_str"?

Riteshdjoshi Riteshdjoshi
19 iul. 2014 14:31:15

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

Sanjay Nakate Sanjay Nakate
19 iul. 2014 14:34:55

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 Riteshdjoshi
19 iul. 2014 14:45:11
0

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)

 ?>
21 iul. 2014 08:56:52
0

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. :)

https://www.youtube.com/watch?v=R7OK-TtNuEc

25 iul. 2014 05:27:20