ฉันทำงานอาแจ็กซ์เมื่อเร็ว ๆ นี้ บทเรียนที่คุณพบบนอินเทอร์เน็ตนั้นคล้ายกันมากและง่ายต่อการใช้งาน แต่ฉันมักจะได้รับคำขอที่ไม่ดี 400ในajax-admin.php
ไฟล์ของฉัน
หลังจากการค้นหาที่ยาวนานและเข้มข้นตอนนี้ฉันค้นพบแล้วว่าเป็นเพราะช่วงเวลาแห่งการรวมกลุ่ม
ถ้าฉันใช้init
action hook เพื่อเริ่มต้นสคริปต์และwp_localize_script
ทุกอย่างทำงานได้ดี ดังนั้นรหัสจะต้องถูกต้อง
ฉัน-หน้าทดสอบ 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();
}
แต่ถ้าฉันใช้เช่นwp_enqeue_scripts
action hook ฉันจะได้รับคำขอที่ไม่ดีเสมอ
if(!is_user_logged_in()){
add_action('wp_enqueue_scripts','ajax_login_init');
}
ปัญหานี้คือ:
ฉันต้องการมีฟังก์ชั่นในไฟล์ php พิเศษและโหลดเฉพาะเมื่อจำเป็นในหน้าใดหน้าหนึ่งโดยเฉพาะ is_page()
เพราะเราต้องนี้ยกตัวอย่างเช่น แต่is_page()
ทำงานได้เร็วที่สุดเมื่อฉันขอใช้ฟังก์ชันโดยมีการรวมไว้ในparse_query
ตะขอการกระทำ:
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');
ดังนั้นแล้วฟังก์ชั่นติดยาเสพติดinit
เบ็ดในmy-page-test-functions.php
ไฟล์ไม่ได้เรียกผมว่าเพราะมาก่อนinit
parse_query
มีวิธีปฏิบัติที่ดีที่สุดในการจัดระเบียบสิ่งนี้หรือไม่ หรือฉันจะแก้ไขadmin-ajax.php
คำขอที่ไม่ดีเมื่อใช้wp_enqeue_scripts
ตะขอการกระทำได้อย่างไร