В последнее время я работаю над AJAX. Все учебники, которые вы найдете в сети, очень похожи и довольно просты в реализации. Но я всегда получаю неверный запрос 400 в моем ajax-admin.php
файле.
После долгих и интенсивных поисков я выяснил, что это из-за времени интеграции.
Если я использую init
ловушку действия для инициализации скрипта и 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
ловушки действий?
is_page()
изнутриajax_login()
или изнутриajax_login_init()
. Первый не может работать, потому что это в контексте Ajax.is_page()
не работает в контексте Ajax. Я обновил свой ответ соответственно.Не забудьте добавить имя функции 'action' к
wp_ajax_
тегу.источник
просто пиши умри; в конце, как показано ниже ...
источник