web-dev-qa-db-fra.com

Wordpress Ajax URL pour la fonction dans functions.php

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

4
LeeTee
//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.

2
Steve North

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.

1
SdeWijs

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.

0
scott