Actualizar parámetro de datos de un script localizado en WordPress

2 minutos de lectura

avatar de usuario
Naourass Derouichi

Estoy trabajando en un tema infantil, En my-page-template.php Tengo :

$id_curr= 5; //calculated value through code
wp_localize_script('my_js', 'ajaxload', array('post_id' => $id_curr)); 

En my_js.js Tengo una llamada AJAX:

$.ajax({
   //...
   type: 'post',
   data: {
      action: 'ajax_load',
      post_id: ajaxload.post_id
   }
})

Ahora en functions.phpquiero editar/actualizar ajaxload.post_id según un nuevo resultado. ¿Hay una manera de hacer eso? Si trato de volver a llamar wp_localize_script() con el mismo $name como se muestra a continuación, ¿funcionará esto?

$id_new= 8; //new calculated value
wp_localize_script('my_js', 'ajaxload', array('post_id' => $id_new));  

  • ¿Cómo decidiría el valor de $id_new?

    – Pablo Stanley

    24/10/2015 a las 14:59


  • @Octopi En la función que llamo a través de AJAX (ubicada en functions.php), hago un $_POST, $id_new es ajaxload.post_id + $n, $n es cuántas veces la condición de un ciclo while fue verdadera.

    – Naourass Derouichi

    24/10/2015 a las 15:49


  • ¿Puedes publicar la función, por favor?

    – Pablo Stanley

    24/10/2015 a las 15:50

  • La pregunta que hice es en realidad una versión muy simplificada de mi problema, la función es muy larga, traté de simplificarla pero aún es demasiado larga y necesita extenderse en gran medida a ambos my-page-template.php y my_js.js partes. Lo que estoy tratando de hacer es enviar una respuesta con datos del controlador PHP después de una solicitud AJAX exitosa.

    – Naourass Derouichi

    24 de octubre de 2015 a las 16:08


  • Creo que su enfoque puede estar equivocado aquí. localizar script realmente está destinado a almacenar constantes. Creo que sería mejor almacenar este valor en un atributo de datos html y actualizarlo según sea necesario.

    – Chris

    27 de octubre de 2015 a las 1:44

Después de una profunda investigación, me atrevo a responder a mi pregunta.

WordPress tiene la función wp_send_json() que permite enviar una respuesta a una solicitud de AJAX. Esta función puede actualizar ajaxload.post_id.

En functions.php :

$return = array('post_id' => $id_new);
wp_send_json($return);

En my_js.js :

$.ajax({
   type: 'post',
   data: {
      action: 'ajax_load',
      post_id: ajaxload.post_id
   },
   success:function(data) {
      var result = $.parseJSON(data);
      ajaxload.post_id = result.post_id;
   }
});

  • ¿Qué pasa si uno está devolviendo un bucle de wordpress, en ajax, y además requiere una actualización de un parámetro de datos localizado?

    – GDT

    17 de enero de 2017 a las 11:57

crear una matriz con ID.

$ids = array( 5, 8 );
foreach ( $ids as $id ) {
    wp_localize_script('my_js', 'ajaxload', array('post_id' => $id));
}

  • Necesito cambiar el valor de la variable ya que se procesa varias veces en diferentes archivos. Incluso si se trata de una matriz, tendré que cambiar dinámicamente sus valores.

    – Naourass Derouichi

    21 de octubre de 2015 a las 2:05

¿Ha sido útil esta solución?