Ich habe in letzter Zeit an Ajax gearbeitet. Die Tutorials, die Sie im Internet finden, sind alle sehr ähnlich und recht einfach zu implementieren. Aber ich bekomme immer eine schlechte Anfrage 400 in meiner ajax-admin.php
Akte.
Nach langer und intensiver Suche habe ich nun herausgefunden, dass dies an der Zeit der Integration liegt.
Wenn ich den init
Aktions-Hook verwende, um das Skript und zu initialisieren wp_localize_script
, funktioniert alles einwandfrei. Der Code selbst muss also korrekt sein.
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();
}
Aber wenn ich zB wp_enqeue_scripts
Action Hook benutze bekomme ich immer die schlechte Anfrage.
if(!is_user_logged_in()){
add_action('wp_enqueue_scripts','ajax_login_init');
}
Das Problem dabei ist:
Ich möchte die Funktionen in einer zusätzlichen PHP-Datei haben und sie nur laden, wenn sie auf einer bestimmten Seite benötigt werden. Dafür brauche ich zum Beispiel is_page()
. Funktioniert aber is_page()
frühestens, wenn ich die Funktion mit dem Include in den parse_query
Action-Hook einhänge:
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');
Also dann werden funktionen zum init
einhängen der my-page-test-functions.php
datei nicht ausgelöst, nehme ich an, da init
kommt das schon mal vor parse_query
.
Gibt es Best Practices, um dies zu organisieren, damit es funktioniert? Oder wie kann ich die admin-ajax.php
fehlerhafte Anfrage bei Verwendung des wp_enqeue_scripts
Aktions-Hooks beheben ?
is_page()
von innenajax_login()
oder von innenajax_login_init()
. Ersteres kann nicht funktionieren, da es sich um einen Ajax-Kontext handelt.is_page()
nicht in einem Ajax-Kontext. Ich habe meine Antwort entsprechend aktualisiert.Denken Sie daran, den Funktionsnamen 'action' an das
wp_ajax_
Tag anzuhängen.quelle
schreibe einfach die; am ende wie unten ...
quelle