Eu amo admin-ajax.php. Mas eu odeio ter que localizar para apontar scripts de front-end para ele e gostaria que houvesse um arquivo equivalente e fácil de encontrar para os temas. (Também me incomoda ver solicitações de front-end passarem por "/ wp-admin /". Nenhuma razão prática, apenas parece IMO feia.)
Então, eu simplesmente copiei admin-ajax.php no diretório raiz em "/ajax.php", ajustei os caminhos de inclusão e removi a definição constante WP_ADMIN. Parece funcionar como gangbusters (agora posso direcionar todos os meus pedidos de AJAX de frontend para /ajax.php! E ainda posso usar os ganchos wp_ajax normais nos meus plugins!).
Mas isso é seguro? O que pode dar errado? Como isso não está embutido no núcleo, presumo que exista uma boa razão para isso. Mas, olhando o código, não vejo nenhum problema imediato.
Você é inteligente - me diga se essa abordagem é louca. Ou se houver um método mais simples que estou ignorando.
Respostas:
Você pode simplesmente usar uma RewriteRule no seu .htaccess acima das regras regulares de reescrita de link permanente:
Agora envie suas solicitações de AJAX para
example.com/ajax
e nunca perca as alterações principais nesse arquivo após as atualizações.fonte
example.com/ajax
URL 404. Você poderia explicar exatamente onde.htaccess
devo adicionar isso. Eu tenho atualmente entre# BEGIN WordPress <IfModule mod_rewrite.c>
e</IfModule> # END WordPress
Primeiro: padronização. Se você planeja usar plug-ins da comunidade, é provável que eles não se importem com o seu
/ajax.php
arquivo na raiz do documento. Então eles não vão usá-lo.Se você vai rolar tudo sozinho, isso não é um problema.
Segundo: e se o núcleo for atualizado? Você irá monitorar e alterar seu arquivo ajax?
Terceiro : apesar de
admin-ajax.php
residirwp-admin
, ele não carrega nenhum material da área de administração (por exemplo, tabelas de listas, etc.). Também não verifica a autenticação nem expõe nada sensível a usuários não conectados. É como um arquivo front-end, em outras palavras. Nada para se preocupar.Quarto: relacionados ao primeiro problema, alguns plugins serão verificados antes de carregar cegamente a funcionalidade relacionada ao ajax. Um exemplo está abaixo. Seu ajax.php modificado provavelmente não fará com que isso seja carregado.
Finalmente: que você se queixa, é uma boa coisa usar a localização para obter o URL do Ajax. Por quê? Porque seus arquivos JS não estão cientes de nada do lado do servidor. Você está dificultando um URL que quebrará se / quando o site for movido? Parece uma má escolha.
Se você realmente não deseja localizar todos os scripts que usam o Ajax, conecte-se
wp_head
muito cedo e cuspa a URL do administrador do ajax. Problema resolvido (a propósito, é exatamente assim que a área administrativa).fonte
Tal como acontece com muitas coisas no WordPress, há um número quase infinito de maneiras de esfolar o gato. Embora todos os métodos aceitos funcionem, eu descobri que eles são menos "legais" do que usar wp_localize_script para incluir o recurso ajax no front-end.
Veja isso:
E então no
se83650.js
arquivo, você referenciaria sua variávelse83650Ajax.ajaxurl
.O benefício dessa técnica é que, se você acabar com muitos plug-ins que tentam duplicar essa funcionalidade, eles não estão incluindo ou substituindo a mesma variável.
ajaxurl
é bastante genérico de incluir, isso deixa você mais contido e fica mais agradável com outros desenvolvedores.fonte