J'adore admin-ajax.php. Mais je déteste devoir localiser pour y pointer des scripts frontaux, et j'aimerais qu'il y ait un fichier équivalent et facile à trouver pour les thèmes. (Cela me dérange également de voir les demandes frontales passer par "/ wp-admin /". Aucune raison pratique, ça a l'air moche IMO.)
J'ai donc simplement copié admin-ajax.php dans le répertoire racine de "/ajax.php", ajusté les chemins d'inclusion et supprimé la définition de la constante WP_ADMIN. Semble fonctionner comme des gangbusters (je peux maintenant diriger toutes mes requêtes AJAX frontend vers /ajax.php! Et je peux toujours utiliser les hooks wp_ajax normaux dans mes plugins!).
Mais est-ce sûr? Qu'est-ce qui pourrait mal tourner? Comme cela n'est pas intégré au cœur, je suppose qu'il y a une bonne raison de ne pas le faire. Mais en parcourant le code, je ne vois aucun problème immédiat.
Vous êtes intelligent - dites-moi si cette approche est folle. Ou s'il y a une méthode plus simple que je néglige.
Réponses:
Vous pouvez simplement utiliser un RewriteRule à votre .htaccess au-dessus des règles de réécriture permalien régulières:
Envoyez maintenant vos demandes AJAX à
example.com/ajax
, et ne manquez jamais les modifications de base apportées à ce fichier après les mises à niveau.la source
example.com/ajax
URL 404. Pourriez-vous nous dire où exactement dans le.htaccess
cas dois-je ajouter ceci? Je l'ai actuellement entre# BEGIN WordPress <IfModule mod_rewrite.c>
et</IfModule> # END WordPress
Premièrement: la normalisation. Si vous prévoyez d'utiliser des plugins de communauté, il est probable qu'ils ne se soucieront pas de votre
/ajax.php
fichier à la racine du document. Ils ne l'utiliseront donc pas.Si vous allez tout rouler vous-même, ce n'est pas un problème.
Deuxièmement: que faire si le noyau est mis à jour? Allez-vous surveiller et modifier votre fichier ajax?
Troisièmement : bien qu'il
admin-ajax.php
résidewp-admin
, il ne charge aucun élément de la zone d'administration (par exemple, les listes de tables, etc.). Il ne vérifie pas non plus l'authentification et n'expose rien de sensible aux utilisateurs non connectés. C'est comme un fichier frontal, en d'autres termes. Rien à craindre.Quatrièmement: liés au premier problème, certains plugins vérifieront avant de charger aveuglément les fonctionnalités liées à ajax. Un exemple est ci-dessous. Votre ajax.php modifié ne provoquera probablement pas ce chargement.
Enfin: ce dont vous vous plaignez, utiliser la localisation pour obtenir l'URL Ajax est une bonne chose à faire. Pourquoi? Parce que vos fichiers JS ne sont au courant d'aucun élément côté serveur. Vous allez durer une URL qui se cassera si / quand le site se déplace? Semble être un mauvais choix.
Si vous ne voulez vraiment pas localiser tous les scripts qui utilisent Ajax, connectez-vous
wp_head
très tôt et crachez l'URL ajax admin. Problème résolu (c'est exactement la façon dont la zone d'administration le fait, soit dit en passant).la source
Comme pour beaucoup de choses dans WordPress, il existe un nombre presque infini de façons de dépouiller le chat. Bien que toutes les méthodes acceptées fonctionnent, j'ai trouvé qu'elles sont moins "soignées" que l'utilisation de wp_localize_script pour inclure la capacité ajax sur le front-end.
Regarde ça:
Et puis dans le
se83650.js
fichier, vous référenceriez votre variable avecse83650Ajax.ajaxurl
.L'avantage de cette technique est que si vous vous retrouvez avec de nombreux plugins qui essaient de dupliquer cette fonctionnalité, ils n'incluent pas ou n'écrasent pas la même variable.
ajaxurl
est assez générique à inclure, cela vous permet de mieux vous contenir et il joue mieux avec d'autres développeurs.la source