Come chiamare una funzione PHP da Javascript in WordPress

1 ago 2018, 17:56:34
Visualizzazioni: 23.2K
Voti: 6

Ho un plugin molto semplice con un file javascript e un file PHP. Voglio chiamare il file PHP dal mio codice javascript e ottenere l'output. La funzione javascript è qualcosa del genere:

function img_upload(){

        var ajax = new XMLHttpRequest();           
        ajax.open('GET', 'http://My_Domain_Name.com/wp-content/plugins/My_Plugin/auth.php', false);
        ajax.send();

    if (ajax.status === 200) {

      console.log(ajax.responseText);

    }

e il file PHP che restituisce i risultati:

<?php
$token=Get_Token();
echo $token;
function Get_Token()
{
   //Esegue alcune operazioni
   return $token;
}
?>

entrambi i file (auth.php e myjs.js) si trovano nella directory principale del plugin.

/home/My_Username/public_html/wp-content/plugins/My_Plugin

Se uso il nome del dominio posso chiamare il file php in ajax.open() e ottenere i risultati, ma so che questo non è il modo corretto di farlo. Come posso chiamare correttamente il file php all'interno del mio codice javascript tramite ajax.open('path_to_php') in WordPress senza indicare il nome del dominio?

0
Tutte le risposte alla domanda 1
2

Ecco un esempio:

Usa questo codice JavaScript di esempio:

jQuery(document).on('click', '.some-element', function(e){
    var ipc = jQuery(this).data('collection-id');
    jQuery('.some-other-element').show();

    jQuery.ajax({
        method: 'post',
        url: ipAjaxVar.ajaxurl,
        data: {
            collection_id: ipc,
            action: 'my_function',
        }
    }).done(function(msg) {
        // Fai qualcosa quando completato
    });

    e.preventDefault();
});

PHP (includi la funzione nel tuo plugin, non usare un file separato):

// Includi il JavaScript sopra nel tuo plugin
wp_enqueue_script('main', plugins_url('js/jquery.main.js', __FILE__), array('jquery'), '', true);

wp_localize_script('main', 'ipAjaxVar', array(
    'ajaxurl' => admin_url('admin-ajax.php')
));

add_action('wp_ajax_my_function', 'my_function');

AGGIORNAMENTO:

Aggiungi il codice PHP al tuo file principale del plugin. Crea un file JavaScript - js/jquery.main.js - e aggiungi il codice sopra. Questo dovrebbe risolvere il problema.

1 ago 2018 18:19:07
Commenti

Potresti descrivere un po' di più i tuoi codici? Sono un principiante nel mondo dei plugin. Ho bisogno solo di un codice semplice. Dove dovrei aggiungere wp_enqueue_script, wp_localize_script?

Sinai Sinai
1 ago 2018 18:42:58

Ho aggiornato la mia risposta. Aggiungi il codice PHP al tuo file principale del plugin. Crea un file JavaScript - js/jquery.main.js - e aggiungi il codice sopra. Dovrebbe funzionare.

Ciprian Ciprian
1 ago 2018 19:27:31