Saya telah mengerjakan ajax belakangan ini. Tutorial yang Anda temukan di internet semuanya sangat mirip dan cukup mudah diterapkan. Tapi saya selalu mendapatkan 400 permintaan buruk pada ajax-admin.php
file saya .
Setelah pencarian yang panjang dan intensif, sekarang saya tahu itu karena waktu integrasi.
Jika saya menggunakan init
kait tindakan untuk menginisialisasi skrip dan wp_localize_script
, semuanya berfungsi dengan baik. Jadi kodenya sendiri harus benar.
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();
}
Tetapi jika saya menggunakan mis wp_enqeue_scripts
hook tindakan saya selalu mendapatkan permintaan yang buruk.
if(!is_user_logged_in()){
add_action('wp_enqueue_scripts','ajax_login_init');
}
Masalahnya adalah:
Saya ingin memiliki fungsi dalam file php tambahan dan memuatnya hanya jika diperlukan pada halaman tertentu. Untuk ini saya perlu, misalnya is_page()
. Tetapi is_page()
bekerja paling awal ketika saya menghubungkan fungsi dengan menyertakan ke dalam parse_query
kait tindakan:
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');
Jadi fungsi ketagihan untuk init
menghubungkan di my-page-test-functions.php
file tidak memicu, saya kira, karena init
datang sebelum parse_query
.
Apakah ada praktik terbaik untuk mengatur ini, sehingga berhasil? Atau bagaimana saya bisa memperbaiki admin-ajax.php
permintaan buruk saat menggunakan wp_enqeue_scripts
hook tindakan?
is_page()
dari dalamajax_login()
atau dari dalamajax_login_init()
. Yang pertama tidak bisa bekerja karena itu dalam konteks Ajax.is_page()
tidak berfungsi dalam konteks Ajax. Saya telah memperbarui jawaban saya sesuai dengan itu.Ingatlah untuk memiliki nama fungsi 'tindakan' yang ditambahkan ke
wp_ajax_
tag.sumber
hanya menulis mati; pada akhirnya seperti di bawah ini ...
sumber