URL Ajax WordPress per funzione in functions.php

11 ott 2016, 14:00:41
Visualizzazioni: 80.8K
Voti: 6

Ho un'applicazione desktop e uso $.getJSON per ottenere dati dal mio sito WordPress utilizzando il plugin WP REST API. Questo funziona bene e quindi presumo di poter fare anche una chiamata Ajax a una funzione nel functions.php. Come posso farlo? Nessuno degli esempi che ho visto fornisce l'ajaxURL. Come posso scoprire qual è?

Ho il seguente codice:

Functions.php (nel sito wordpress sul server)

//Chiamato da Ajax dall'App - elenca il contenuto della cartella in modo che possa essere scaricato e memorizzato localmente
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 (eseguito usando node webkit localmente dalla macchina)

//chiamata ajax 
var data = {
    action: 'path',
    path: datafolder;
};
var ajaxurl = baseurl + '';  //QUAL È QUESTO?!?!
jQuery.post(ajaxurl, data, function(response) {
    alert('Ricevuto questo dal server: ' + response);
    console.log(response);
});

-------------------MODIFICA----------------------

Dopo la risposta qui sotto ho provato il codice seguente basato sul consiglio ma ottengo

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

Functions.php

//aggiungi codice per utilizzare ajax
function add_ajax_script() {

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

}

//Chiamato da Ajax dall'App - elenca il contenuto della cartella in modo che possa essere scaricato e memorizzato localmente

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

//chiamata 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('Ricevuto questo dal server: ' + response);
            console.log(response);
        });

Se rimuovo la funzione add_ajax_script() e semplicemente uso il seguente codice restituisce 0.

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

Per favore aiuto...

0
Tutte le risposte alla domanda 3
10
//chiamata ajax
var data = {
    action: 'folder_contents',
    path: datafolder
};
var ajaxurl = baseurl + '';  //COS'È QUESTO?!?!
jQuery.post(ajaxurl, data, function(response) {
    alert('Ricevuto dal server: ' + response);
    console.log(response);
});

E il tuo PHP in functions.php

//Chiamato da Ajax dall'App - elenca i contenuti della cartella così possono essere scaricati e memorizzati localmente
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');

Il codice sopra aggiunge la tua funzione come azione ajax. Poi chiami il nome della funzione nel tuo AJAX.

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

11 ott 2016 14:09:20
Commenti

Scusa, nel tuo JS devi anche aggiungere l'ajaxurl per il tuo sito. Il modo in cui lo faccio io è definirlo e localizzare lo script per l'accesso. Vedi: https://codex.wordpress.org/Function_Reference/wp_localize_script

Tex0gen Tex0gen
11 ott 2016 14:12:21

Vedi anche qui per un esempio dell'ajaxurl e come localizzarlo. https://www.creare.co.uk/blog/wp/wp-localize-script-wordpress

Tex0gen Tex0gen
11 ott 2016 14:14:18

OK, sto avendo difficoltà a far funzionare questo. Ho modificato la mia query originale sopra per mostrare cosa ho provato in base alla tua risposta

LeeTee LeeTee
11 ott 2016 17:36:07

Invece di "return $files", usa "echo $files".

Tex0gen Tex0gen
11 ott 2016 17:52:16

OPPURE, usa wp_send_json($files); https://codex.wordpress.org/Function_Reference/wp_send_json

Tex0gen Tex0gen
11 ott 2016 17:53:35

Ok ho cambiato in wp_send_json($files); ma purtroppo ottengo ancora 0

LeeTee LeeTee
11 ott 2016 17:58:35

Prova: `function folder_contents() {

echo 'hello';

die(); }`

Vedi la parola hello apparire nella console.log?

Tex0gen Tex0gen
11 ott 2016 18:03:25

Ho provato ma ottengo 0, ho anche provato a rimuovere tutto dalla funzione ma ottengo sempre 0. Se vado direttamente al file con http://myweb.co.uk/wp-admin/admin-ajax.php?action=folder_contents ottengo ancora 0.

LeeTee LeeTee
11 ott 2016 18:11:20

grazie per l'aiuto comunque, è molto apprezzato :)

LeeTee LeeTee
11 ott 2016 18:11:35

Continuiamo questa discussione nella chat.

Tex0gen Tex0gen
11 ott 2016 18:13:12
Mostra i restanti 5 commenti
1

Nel tuo codice vedo che localizzi lo script 'ajax-js', ma lo script stesso è accodato (enqueued)? Qualche settimana fa ho dovuto usare wp_localize_script e ho dovuto accodare il mio script JS all'interno della funzione che chiamava wp_localize_script. Per esempio:

add_action( 'wp_enqueue_scripts', 'google_js_script' );

function google_js_script()
{
  // Accoda lo script js     
  wp_enqueue_script('google-js', GOOGLE_PLG_URL . 'assets/js/google-places.js', array('jquery'), true);

  // Localizza lo script JS accodato
  wp_localize_script( 'google-js', 'ajax_object',
    array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'place' => '' ) );
}

Spero che questo aiuti a risolvere il problema.

11 ott 2016 23:43:00
Commenti

Il JS non viene utilizzato sul sito stesso. Sta utilizzando il JS all'interno di un'applicazione desktop.

Tex0gen Tex0gen
12 ott 2016 14:26:58
1

Il WP Codex afferma che puoi utilizzare la variabile globale ajaxurl senza dichiararla prima. In altre parole, commenta questa riga:

var ajaxurl = ajax_params.ajax_url;

...e verifica se funziona.

11 ott 2016 23:20:17
Commenti

Se leggi l'avviso per intero vedrai anche questo: "Questo è vero solo sul lato amministrazione. Se stai utilizzando AJAX sul front-end, devi fare in modo che il tuo JavaScript sia consapevole dell'URL di admin-ajax.php. Una best practice è documentata nel quarto esempio qui sotto, utilizzando wp_localize_script()."

brett brett
26 ago 2022 20:41:14