J'ai une application de bureau et j'utilise $ .getJSON pour obtenir des données de mon site wordpress en utilisant le plugin WP REST API . Cela fonctionne bien et je suppose donc que je peux aussi faire un appel Ajax à une fonction du fichier functions.php? Comment puis-je faire cela? Aucun des exemples que j'ai vus ne fournit ajaxURL. Comment puis-je savoir ce que c'est?
J'ai le code suivant:
Functions.php (sur le site wordpress sur le serveur)
//Called by Ajax from App - list the contents of the folder so they can be downloaded and stored locally
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 (exécuté à l'aide de node webkit localement à partir de la machine)
//ajax call
var data = {
action: 'path',
path: datafolder;
};
var ajaxurl = baseurl + ''; //WHAT IS THIS?!?!
jQuery.post(ajaxurl, data, function(response) {
alert('Got this from the server: ' + response);
console.log(response);
});
-------------------MODIFIER----------------------
Après la réponse ci-dessous, j'ai essayé le code ci-dessous en me basant sur les conseils mais je reçois
"index.html: 324 Uncaught ReferenceError: ajax_params n'est pas défini"
Functions.php
//add code to use ajax
function add_ajax_script() {
wp_localize_script( 'ajax-js', 'ajax_params', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
//Called by Ajax from App - list the contents of the folder so they can be downloaded and stored locally
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
//ajax call
var data = {action: 'PowerPoint_folder_contents',path: datafolder};
var ajaxurl = ajax_params.ajax_url;
console.log(ajaxurl);
jQuery.post(ajaxurl, data, function(response) {
alert('Got this from the server: ' + response);
console.log(response);
});
Si je supprime la fonction add_ajax_script () et utilise simplement le texte ci-dessous, il retourne 0.
var ajaxurl = baseurl + 'wp-admin/admin-ajax.php';
S'il vous plaît aider ...
//ajax call
var data = {
action: 'folder_contents',
path: datafolder;
};
var ajaxurl = baseurl + ''; //WHAT IS THIS?!?!
jQuery.post(ajaxurl, data, function(response) {
alert('Got this from the server: ' + response);
console.log(response);
});
Et votre PHP dans functions.php
//Called by Ajax from App - list the contents of the folder so they can be downloaded and stored locally
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');
Ce qui précède ajoute votre fonction en tant qu'action ajax. Vous appelez ensuite le nom de la fonction dans votre AJAX.
Voir https://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)
J'espère que cela pourra aider.
Dans votre code, je vois que vous localisez le script 'ajax-js', mais le script lui-même est-il mis en file d'attente? J'ai dû utiliser les scripts wp_localize il y a quelques semaines et mettre mon script JS en file d'attente à l'intérieur de la fonction appelée script wp_localize. Par exemple:
add_action( 'wp_enqueue_scripts', 'google_js_script' );
function google_js_script()
{
// Enqueue the js script
wp_enqueue_script('google-js', GOOGLE_PLG_URL . 'assets/js/google-places.js', array('jquery'), true);
// Localize the enqueued JS script
wp_localize_script( 'google-js', 'ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'place' => '' ) );
}
J'espère que cela aide à résoudre le problème.
Le WP Codex indique que vous pouvez utiliser la variable globale ajaxurl
sans la déclarer au préalable. En d'autres termes, commentez cette ligne:
var ajaxurl = ajax_params.ajax_url;
... et voir si ça marche.