J'ai travaillé sur ajax récemment. Les tutoriels que vous trouvez sur le net sont tous très similaires et assez faciles à mettre en œuvre. Mais je reçois toujours une mauvaise requête 400 sur mon ajax-admin.php
dossier.
Après une recherche longue et intensive, j'ai découvert que c'était à cause du temps d'intégration.
Si j'utilise le init
crochet d'action pour initialiser le script et wp_localize_script
, tout fonctionne bien. Le code lui-même doit donc être correct.
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();
}
Mais si j'utilise par exemple le wp_enqeue_scripts
crochet d'action, je reçois toujours la mauvaise demande.
if(!is_user_logged_in()){
add_action('wp_enqueue_scripts','ajax_login_init');
}
Le problème avec ceci est:
Je voudrais avoir les fonctions dans un fichier php supplémentaire et les charger uniquement si elles sont nécessaires sur une page particulière. Pour cela, j'ai besoin, par exemple is_page()
. Mais is_page()
fonctionne au plus tôt lorsque je connecte la fonction avec l'inclusion au parse_query
crochet d'action:
functions.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');
Alors les fonctions accrochées pour init
accrocher le my-page-test-functions.php
fichier ne se déclenchent pas, je suppose, car init
vient avant parse_query
.
Existe-t-il des meilleures pratiques pour organiser cela, donc ça marche? Ou comment puis-je corriger la admin-ajax.php
mauvaise demande lors de l'utilisation du wp_enqeue_scripts
crochet d'action?
is_page()
de l'intérieurajax_login()
ou de l'intérieurajax_login_init()
. Le premier ne peut pas fonctionner parce que c'est dans un contexte Ajax.is_page()
ne fonctionne pas dans un contexte Ajax. J'ai mis à jour ma réponse en conséquence.N'oubliez pas d'avoir le nom de la fonction «action» ajouté à la
wp_ajax_
balise.la source
il suffit d'écrire mourir; à la fin comme ci-dessous ...
la source