Tengo un tipo de publicación personalizado al que quiero acceder a través de jQuery, preferiblemente usando JSON.
Entonces lo primero es lo primero. crear una función que devuelva / echos json es bastante fácil, pero ¿cómo accedería a él 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 esto recomendable? Prefiero ponerlo dentro de una carpeta de complementos.
He intentado leer el códice de WordPress, pero la forma en que se manejan las llamadas ajax me confunde, ya que está publicando cada llamada ajax a admin-ajax.php, a pesar de que no es una página de administración.
¿Alguien puede enderezar los problemas que estoy teniendo?
/Tormenta
editar
El problema que tuve fue entender cómo se hacían 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 colocando el archivo en la raíz de wp; no quiero hacer eso. Pero ahora he aprendido a usar wp_ajax_ (nopriv _) [acción] y puedo acceder efectivamente a la json que creo. El problema restante es dónde debo colocar el JS para hacer la llamada. Quiero colocarlo en el archivo js de complementos, pero como se presentará en una página, no en el sitio de administración, ajaxurl no está definido, por lo que tengo que hacer eco con php.
echo admin_url('admin-ajax.php');
Entonces, la pregunta es cómo debo combinar este php con el javascript, y cómo debo ponerlo en cola, ya que no es un archivo o un script.
Respuestas:
Ajax Handler
De hecho, es un poco confuso que el controlador Ajax esté en el
wp-admin/
directorio, pero sí, también puede y debe usarlo para solicitudes que no sean de administrador. Luego registra un controlador para elwp_ajax_nopriv_[action]
gancho, en lugar de lo normalwp_ajax_[action]
. En este caso, solo tiene que seguir las primeras líneas deadmin-ajax.php
, ya que una solicitud realizada por un usuario que no ha iniciado sesión ya abandonará la página alrededor de la línea 50.Por lo tanto, registre una función para el gancho
wp_ajax_nopriv_get_custom_post_data
, y se llamará si lo solicitaadmin-ajax.php
con elaction
parámetro establecido enget_custom_post_data
. Asegúrese de llamardie()
al final de su controlador usted mismo, de lo contrariodie(-1)
se devolverá el valor predeterminado . Y también registre la versión de inicio de sesiónwp_ajax_get_custom_post_data
(a la misma función de controlador, no hay problema), ya que si ha iniciado sesión en su sitio, no se dará pornopriv
vencido.Configuración del lado del servidor a Javascript
El truco para enviar datos de configuración del lado del servidor (como la
admin-ajax.php
url) eswp_localize_script()
. Le pasa 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.storm_json_config
es el nombre del identificador (si desea eliminarlo posteriormente),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 comojQuery.post(storm_config.ajaxurl, ...)
.Ver también la respuesta de bueltge a una pregunta similar .
Javascript estático desde el directorio de complementos
Para cargar un archivo Javascript estático desde su propio directorio de complementos, utilice
wp_enqueue_script()
. Eso se vería así:Donde
storm_json
nuevamente hay un nombre de identificador, luego le da el enlace al archivo, luego las dependencias (pueden sernull
) y luego un número de versión que se agregará después de la solicitud para superar las memorias caché del navegador en las actualizaciones.fuente
wp_localize_script()
, que puede usar para enviar datos de configuración desde el lado del servidor al navegador. (Pequeño consejo: si agrega@
un nombre de usuario, esa persona recibirá una notificación de su respuesta. Así@Mike: I updated the title
que asegúrese de ver su comentario)