URL Ajax WordPress pentru funcție în functions.php

11 oct. 2016, 14:00:41
Vizualizări: 80.8K
Voturi: 6

Am o aplicație desktop și folosesc $.getJSON pentru a prelua date de pe site-ul meu WordPress folosind plugin-ul WP REST API. Acest lucru funcționează bine și presupun că pot face și un apel Ajax către o funcție din functions.php? Cum fac acest lucru? Niciunul dintre exemplele pe care le-am văzut nu oferă ajaxURL. Cum pot afla care este acesta?

Am următorul cod:

Functions.php (în site-ul WordPress de pe server)

//Apelat prin Ajax din App - listează conținutul folderului pentru a putea fi descărcat și stocat local
function folder_contents() {

    $folderPath = $_POST['path'] ;
    $files = array_diff(scandir($path), array('.', '..'));
    print_r($files);
    return $files;

    die(); 
}

add_action('wp_ajax_my_action', 'folder_contents');

app.js (rulat folosind node webkit local de pe mașină)

//apel ajax 
var data = {
    action: 'path',
    path: datafolder;
};
var ajaxurl = baseurl + '';  //CE ESTE ASTA?!?!
jQuery.post(ajaxurl, data, function(response) {
    alert('Am primit asta de la server: ' + response);
    console.log(response);
});

-------------------EDITARE----------------------

După răspunsul de mai jos am încercat codul de mai jos bazat pe sfat dar primesc

"index.html:324 Uncaught ReferenceError: ajax_params is not defined"

Functions.php

//adăugare cod pentru a folosi ajax
function add_ajax_script() {

    wp_localize_script( 'ajax-js', 'ajax_params', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );

}

//Apelat prin Ajax din App - listează conținutul folderului pentru a putea fi descărcat și stocat local

function folder_contents() {

    $folderPath = $_POST['path'] ;
    $files = array_diff(scandir($path), array('.', '..'));
    wp_send_json($files);

    die(); 
}

add_action('wp_ajax_folder_contents', 'folder_contents');
add_action('wp_ajax_nopriv_folder_contents', 'folder_contents');


add_action( 'wp_enqueue_scripts', 'add_ajax_script' );

App.js

//apel ajax
        var data = {action: 'powerpoint_folder_contents',path: datafolder};
        var ajaxurl =  ajax_params.ajax_url;
        console.log(ajaxurl);
        jQuery.post(ajaxurl, data, function(response) {
            alert('Am primit asta de la server: ' + response);
            console.log(response);
        });

Dacă elimin funcția add_ajax_script() și folosesc pur și simplu codul de mai jos, acesta returnează 0.

var ajaxurl = baseurl + 'wp-admin/admin-ajax.php';

Vă rog să mă ajutați...

0
Toate răspunsurile la întrebare 3
10
//apel ajax 
var data = {
    action: 'folder_contents',
    path: datafolder
};
var ajaxurl = baseurl + '';  //CE ESTE ASTA?!?!
jQuery.post(ajaxurl, data, function(response) {
    alert('Am primit acest raspuns de la server: ' + response);
    console.log(response);
});

Și codul tău PHP în functions.php

//Apelat prin Ajax din App - listează conținutul folderului pentru a putea fi descărcat și stocat local
function folder_contents() {

$folderPath = $_POST['path'] ;
$files = array_diff(scandir($path), array('.', '..'));
print_r($files);
return $files;

die(); 
}

add_action('wp_ajax_folder_contents', 'folder_contents');
add_action('wp_ajax_nopriv_folder_contents', 'folder_contents');

Codul de mai sus adaugă funcția ta ca o acțiune ajax. Apoi apelezi numele funcției în AJAX-ul tău.

Vezi https://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)

11 oct. 2016 14:09:20
Comentarii

Îmi pare rău, în codul tău JS trebuie să adaugi și ajaxurl pentru site-ul tău. Modul în care fac acest lucru este prin definirea lui și localizarea scriptului pentru acces. Vezi: https://codex.wordpress.org/Function_Reference/wp_localize_script

Tex0gen Tex0gen
11 oct. 2016 14:12:21

De asemenea, vezi aici un exemplu de ajaxurl și localizare. https://www.creare.co.uk/blog/wp/wp-localize-script-wordpress

Tex0gen Tex0gen
11 oct. 2016 14:14:18

OK, mă chinui să fac asta să funcționeze. Am editat interogarea mea originală de mai sus pentru a arăta ce am încercat pe baza răspunsului tău

LeeTee LeeTee
11 oct. 2016 17:36:07

În loc de "return $files", folosește "echo $files".

Tex0gen Tex0gen
11 oct. 2016 17:52:16

SAU, folosește wp_send_json($files); https://codex.wordpress.org/Function_Reference/wp_send_json

Tex0gen Tex0gen
11 oct. 2016 17:53:35

Am schimbat la wp_send_json($files); dar tot primesc 0, din păcate

LeeTee LeeTee
11 oct. 2016 17:58:35

Încearcă: `function folder_contents() {

echo 'hello';

die(); }`

Vezi cuvântul hello în console.log?

Tex0gen Tex0gen
11 oct. 2016 18:03:25

Am încercat asta și primesc 0, am încercat să elimin tot din acea funcție și tot primesc 0. Dacă accesez direct fișierul cu http://myweb.co.uk/wp-admin/admin-ajax.php?action=folder_contents tot primesc 0.

LeeTee LeeTee
11 oct. 2016 18:11:20

mulțumesc pentru ajutor, apreciez mult :)

LeeTee LeeTee
11 oct. 2016 18:11:35

continuăm această discuție în chat.

Tex0gen Tex0gen
11 oct. 2016 18:13:12
Arată celelalte 5 comentarii
1

În codul tău observ că localizezi scriptul 'ajax-js', dar scriptul în sine este încărcat? Am avut nevoie să folosesc wp_localize_script acum câteva săptămâni și a trebuit să încarc scriptul JS în interiorul funcției care apela wp_localize_script. De exemplu:

add_action( 'wp_enqueue_scripts', 'google_js_script' );

function google_js_script()
{
  // Încarcă scriptul js     
  wp_enqueue_script('google-js', GOOGLE_PLG_URL . 'assets/js/google-places.js', array('jquery'), true);

  // Localizează scriptul JS încărcat
  wp_localize_script( 'google-js', 'ajax_object',
    array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'place' => '' ) );
}

Sper că acest lucru te ajută să depanezi problema.

11 oct. 2016 23:43:00
Comentarii

JS-ul nu este folosit pe site în sine. El folosește JS-ul în cadrul unei aplicații desktop.

Tex0gen Tex0gen
12 oct. 2016 14:26:58
1

WP Codex afirmă că poți folosi variabila globală ajaxurl fără a o declara mai întâi. Cu alte cuvinte, comentează această linie:

var ajaxurl = ajax_params.ajax_url;

...și vezi dacă funcționează.

11 oct. 2016 23:20:17
Comentarii

Dacă ai citit acea notifică în întregime, vei vedea și asta: "Aceasta este valabilă doar pe partea de administrare. Dacă folosești AJAX pe front-end, trebuie să faci JavaScript-ul tău conștient de URL-ul admin-ajax.php. O practică recomandată este documentată în al patrulea exemplu de mai jos, folosind wp_localize_script()."

brett brett
26 aug. 2022 20:41:14