He estado trabajando en ajax últimamente. Los tutoriales que encuentra en la red son muy similares y fáciles de implementar. Pero siempre recibo una mala solicitud 400 en mi ajax-admin.php
archivo.
Después de una búsqueda larga e intensa, ahora descubrí que se debe al tiempo de integración.
Si uso el init
gancho de acción para inicializar el script y wp_localize_script
, todo funciona bien. Entonces el código en sí debe ser correcto.
my-page-test-functions.php
function ajax_login_init(){
wp_register_script('ajax-login-script',get_stylesheet_directory_uri().'/js/ajax-login-script.js',array('jquery'));
wp_enqueue_script('ajax-login-script');
wp_localize_script('ajax-login-script','ajax_login_object',array('ajaxurl' => admin_url('admin-ajax.php'),'redirecturl' => 'REDIRECT_URL_HERE','loadingmessage' => __('Sending user info, please wait...')));
add_action('wp_ajax_nopriv_ajaxlogin','ajax_login');
}
if(!is_user_logged_in()){
add_action('init','ajax_login_init');
}
function ajax_login(){
//nonce-field is created on page
check_ajax_referer('ajax-login-nonce','security');
//CODE
die();
}
Pero si uso, por ejemplo wp_enqeue_scripts
, el gancho de acción, siempre recibo la solicitud incorrecta.
if(!is_user_logged_in()){
add_action('wp_enqueue_scripts','ajax_login_init');
}
El problema con esto es:
Me gustaría tener las funciones en un archivo php adicional y cargarlas solo si son necesarias en una página en particular. Para esto necesito, por ejemplo is_page()
. Pero is_page()
funciona lo antes posible cuando engancho la función con la inclusión en el parse_query
gancho de acción:
funciones.php
function sw18_page_specific_functions(){
if(is_page('page-test')){
include_once dirname(__FILE__).'/includes/my-page-test-functions.php';
}
}
add_action('parse_query','sw18_page_specific_functions');
Entonces, las funciones enganchadas para init
enganchar en el my-page-test-functions.php
archivo no se activan, supongo, porque init
viene antes parse_query
.
¿Hay mejores prácticas para organizar esto, por lo que funciona? ¿O cómo puedo solucionar la admin-ajax.php
solicitud incorrecta cuando uso el wp_enqeue_scripts
gancho de acción?
is_page()
desde dentroajax_login()
o desde dentroajax_login_init()
? El primero no puede funcionar porque está en un contexto Ajax.is_page()
no funciona en un contexto Ajax. He actualizado mi respuesta en consecuencia.Recuerde tener el nombre de la función 'acción' agregado a la
wp_ajax_
etiqueta.fuente
solo escribe morir; al final como abajo ...
fuente