Eu tenho trabalhado no ajax ultimamente. Os tutoriais que você encontra na rede são muito semelhantes e fáceis de implementar. Mas sempre recebo uma solicitação ruim 400 no meu ajax-admin.php
arquivo.
Após uma pesquisa longa e intensiva, agora descobri que é por causa do tempo de integração.
Se eu usar o init
gancho de ação para inicializar o script wp_localize_script
, tudo funcionará bem. Portanto, o próprio código deve estar correto.
minha-página-teste-funções.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();
}
Mas se eu usar, por exemplo wp_enqeue_scripts
, gancho de ação, sempre recebo a solicitação incorreta.
if(!is_user_logged_in()){
add_action('wp_enqueue_scripts','ajax_login_init');
}
O problema com isso é:
Gostaria de ter as funções em um arquivo php extra e carregá-las somente se forem necessárias em uma página específica. Para isso eu preciso, por exemplo is_page()
. Mas is_page()
funciona o mais cedo possível quando eu conecto a função com o include no parse_query
gancho de ação:
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');
Então, funções conectadas para init
conectar my-page-test-functions.php
arquivos não são acionadas, suponho, porque init
vem antes parse_query
.
Existem práticas recomendadas para organizar isso, para que funcione? Ou como posso corrigir a admin-ajax.php
solicitação incorreta ao usar o wp_enqeue_scripts
gancho de ação?
is_page()
de dentroajax_login()
ou de dentroajax_login_init()
. O primeiro não pode funcionar porque está em um contexto Ajax.is_page()
não funciona em um contexto Ajax. Atualizei minha resposta de acordo.Lembre-se de ter o nome da função 'action' anexado à
wp_ajax_
tag.fonte
apenas escreva morrer; no final, como abaixo ...
fonte