Cómo administrar llamadas ajax y JSON en wordpress

12

Tengo un tipo de publicación personalizado al que quiero acceder a través de jQuery, preferiblemente utilizando JSON.

Lo primero es lo primero. crear una función que devuelva / echos json es bastante fácil, pero ¿cómo puedo acceder a ella a través de jquery?

como Mike escribe en esta pregunta , él - por lo que yo entiendo - lo coloca en la raíz de wordpress. lo que lo haría accesible usando el nombre del archivo php, pero ¿es recomendable? Preferiría ponerlo dentro de una carpeta de plugins.

He intentado leer el códice de wordpress, pero la forma en que se manejan las llamadas ajax simplemente me confunde, ya que estás publicando todas las llamadas ajax a admin-ajax.php, aunque no sea una página de administración.

¿Alguien puede solucionar los problemas que estoy teniendo?

/ Storm

edit

El problema que tuve fue entender cómo se debían hacer las llamadas ajax en wordpress, así como dónde colocar su código php y js para hacer / manejar las llamadas.

En la otra pregunta a la que me vinculé, creaste una función que coloca el archivo en la raíz de wp, no quiero hacerlo. Pero ahora he aprendido a usar wp_ajax_ (nopriv _) [acción] y puedo acceder efectivamente al json que creo. El problema que queda es dónde debo colocar el JS para realizar la llamada. Quiero colocarlo en el archivo js de complementos, pero como esto se presenta en una página, no en el sitio de administración, ajaxurl no está definido, así que tengo que hacer eco usando php.

echo admin_url('admin-ajax.php');

Entonces, la pregunta se convierte en cómo debo combinar este php con el javascript y cómo debo encolarlo, ya que no es un archivo o un script.

    
pregunta Storm 03.11.2010 - 21:42

1 respuesta

17

Ajax Handler

De hecho, es un poco confuso que el controlador Ajax esté en el directorio wp-admin/ , pero sí, puede y debe usarlo también para solicitudes no administrativas. A continuación, registra un controlador para el gancho wp_ajax_nopriv_[action] , en lugar del wp_ajax_[action] normal. En este caso, solo tiene que seguir las primeras líneas de admin-ajax.php , ya que una solicitud realizada por un usuario que no ha iniciado sesión dejará la página alrededor de la línea 50.

Registre una función para el gancho wp_ajax_nopriv_get_custom_post_data , y se llamará si solicita admin-ajax.php con el parámetro action establecido en get_custom_post_data . Asegúrese de llamar a die() al final de su manejador, de lo contrario, se devolverá die(-1) predeterminado. Y también registre la versión de inicio de sesión, wp_ajax_get_custom_post_data (para la misma función de controlador, no hay problema), ya que si inició sesión en su sitio, no alcanzará el nopriv hook.

Configuración del lado del servidor a Javascript

El truco para enviar datos de configuración del lado del servidor (como admin-ajax.php url), es wp_localize_script() . Le pasas una serie de claves y valores que se incluirán en la parte superior de la página. Probablemente, esto se creó originalmente solo para cadenas localizables, pero también puede usarlo para pasar datos de configuración.

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

storm_json_config es el nombre del identificador (si desea retirarlo de la cola más tarde), storm_config es el nombre del objeto Javascript que contendrá sus datos. Por lo tanto, su archivo Javascript estático puede contener una línea como jQuery.post(storm_config.ajaxurl, ...) .

Vea también la respuesta de bueltge a una pregunta similar .

Javascript estático desde el directorio del complemento

Para cargar un archivo Javascript estático desde su propio directorio de plugin, use wp_enqueue_script() . Eso se vería algo como esto:

wp_enqueue_script('storm_json', plugin_dir_url(__FILE__) . 'js/json.js', array('jquery'), '20101105');

Donde storm_json es nuevamente un nombre de identificador, luego le da el enlace al archivo, luego las dependencias (pueden ser null ) y luego un número de versión que se agregará después de la solicitud para superar las caches del navegador. actualizaciones.

    
respondido por el Jan Fabry 03.11.2010 - 22:06

Lea otras preguntas en las etiquetas