Cómo llamar a una función PHP desde Javascript en WordPress

1 ago 2018, 17:56:34
Vistas: 23.2K
Votos: 6

Tengo un plugin muy simple con un archivo javascript y un archivo PHP. Quiero llamar al archivo PHP desde mi código javascript y obtener la salida. La función javascript es algo como lo siguiente:

function img_upload(){

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

    if (ajax.status === 200) {

      console.log(ajax.responseText);

    }

y el archivo PHP que devuelve los resultados:

<?php
$token=Get_Token();
echo $token;
function Get_Token()
{
   //Hacer algunas cosas
   return $token;
}
?>

ambos archivos (auth.php y myjs.js) están en el directorio raíz del plugin.

/home/Mi_Usuario/public_html/wp-content/plugins/Mi_Plugin

Si uso el nombre de dominio puedo llamar al archivo php en ajax.open() y obtener los resultados, pero sé que esta no es la forma correcta de hacerlo. ¿Cómo puedo llamar al archivo php dentro de mi código javascript vía ajax.open('ruta_al_php') en WordPress apropiadamente sin indicar el nombre de dominio?

0
Todas las respuestas a la pregunta 1
2

Aquí tienes un ejemplo:

Usa este código JavaScript de ejemplo:

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) {
        // Haz algo cuando termine
    });

    e.preventDefault();
});

PHP (incluye la función en tu plugin, no uses un archivo separado):

// Incluye el JavaScript anterior en tu 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');

ACTUALIZACIÓN:

Añade el código PHP a tu archivo principal del plugin. Crea un archivo JavaScript - js/jquery.main.js - y añade el código anterior. Eso debería funcionar.

1 ago 2018 18:19:07
Comentarios

¿Podrías describir un poco más tus códigos? Soy nuevo en el mundo de los plugins. Necesito solo un código simple. ¿Dónde debería agregar wp_enqueue_script, wp_localize_script?

Sinai Sinai
1 ago 2018 18:42:58

He actualizado mi respuesta. Agrega el código PHP a tu archivo principal del plugin. Crea un archivo JavaScript - js/jquery.main.js - y agrega el código de arriba. Eso debería funcionar.

Ciprian Ciprian
1 ago 2018 19:27:31