URL Ajax WordPress pentru funcție în functions.php
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...
//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)

Î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

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

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

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

Încearcă: `function folder_contents() {
echo 'hello';
die(); }`
Vezi cuvântul hello în console.log?

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.

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

Î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.

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ă.

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()
."
