我最近一直在研究ajax。您在网上找到的教程都非常相似并且很容易实现。但是,我总是得到一个错误的请求400在我的ajax-admin.php
文件。
经过长时间深入的搜索,我现在发现这是由于集成时间所致。
如果我使用init
动作挂钩来初始化脚本和wp_localize_script
,则一切正常。因此,代码本身必须正确。
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();
}
但是,如果我使用wp_enqeue_scripts
动作钩子,我总是会收到错误的请求。
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
动作挂钩时如何解决错误的请求?