• Resolved manfer

    (@manfer)


    El plugin genera un error javascript en el navegador:

    resul is NULL line 47 lib.js

    Haciendo debug veo que eso se produce porque la respuesta a la petición ajax dirigida a la dirección /wp-content/plugins/asesor-cookies-para-la-ley-en-espana/traer_aviso.php es nula.

    Posiblemente esto es normal ya que en un principio no se deben hacer peticiones ajax a un script situado en el directorio de plugins. No he intentado analizarlo mucho más allá pero yo diría que no se está implementando correctamente AJAX en WordPress.

    Si lee el artículo verá que las peticiones ajax deben ser dirigidas al script PHP admin-ajax.php perteneciente al núcleo de WordPress. Para obtener la URL de ese script se debe usar el siguiente código:

    admin_url( 'admin-ajax.php' )

    En mi opinión debería cambiar la línea 69 del archivo lib/plugin.php que ahora dice:

    'url_traer_aviso_php' => CDP_COOKIES_TRAER_AVISO_PHP_URL,

    por:

    'url_traer_aviso_php' => admin_url( 'admin-ajax.php' ),

    y así las peticiones Ajax deberían funcionar de manera correcta.

    Además, si es que yo lo entiendo bien, el registro de las acciones wp_ajax_ y wp_ajax_nopriv_ preferiblemente se deben hacer dentro de if (is_admin()). Así que las líneas 26-32 deberían ser incluidas más abajo en dónde empieza el bloque de código de la línea 38.

    Las acciones ajax_traer_aviso_get registradas en las líneas 31-32 parecen innecesarias ya que ni tan siquiera se está implementando en ningún sitio la función ajax_traer_aviso_get. Con las dos registradas en las líneas 29-30 parece suficiente.

    Asimismo el archivo traer_aviso.php es innecesario ya que, según mi opinión y como he explicado, las peticiones Ajax se deben hacer al script del núcleo admin-ajax.php** y no a un script del propio plugin. Igualmente el archivo external-wp.php que se carga en el script traer_aviso.php, parece carecer de utilidad.

    ** Esto es indistintamente que sea para las páginas de administración o para el frontend. La única diferencia entre unas y otras es que si solo se necesita ajax para las páginas de administración entonces en los archivos javascript se puede hacer uso de la variable global ajaxurl que contendrá la url del script admin-ajax.php al que se deben dirigir las peticiones ajax. Mientras que si necesitamos ajax también fuera de las páginas de administración necesitamos definir nosotros una variable que contenga la url a la que deben hacerse las peticiones ajax. Esto último es lo que usted hace -casi correctamente- con la línea 69 del archivo lib/plugin.php.

    Pudiera estar equivocado porque hace tiempo que no veo mucho código de WordPress pero así es como creo que se implementa Ajax en WordPress.

    https://wordpress.org/plugins/asesor-cookies-para-la-ley-en-espana/

Viewing 2 replies - 1 through 2 (of 2 total)
  • Plugin Author cdoral

    (@cdoral)

    Thanks by your explanation!

    ===========

    Gracias por tus explicaciones, le echaré un vistazo en detalle en algún momento.

    Muchas gracias Manfer. Con tu solución he podido hacerlo funcionar.

    Un Saludo.

Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘No funciona. Respuesta Ajax vacía.’ is closed to new replies.