admin-ajax.php vs modèle de page personnalisé pour les requêtes Ajax
-
-
BTW: si vous souhaitez créer une API sur votre site wordpresset souhaitez une URL qui a du sens comme URL de demande d'API.Ensuite,vouspouvezeffectuer une réécriture demod afin que `http://site.com/api/`mappe à `http://site.com/wp-admin/admin-ajax.php`BTW: if you want to make a api on your wordpress site and want a url that make sense as api request url. Then you can do some mod rewrite so `http://site.com/api/` maps to `http://site.com/wp-admin/admin-ajax.php`
- 0
- 2012-07-22
- Sisir
-
2 réponses
- votes
-
- 2012-07-22
Premièrement,l'inconvénient évident de lapremièreméthodeest qu'elle dépend de votrepage spécifique,de votremodèleet de votre structure depermalienpour quetoutfonctionne correctement.L'utilisation de
admin-ajax.php
fonctionnera correctement dansn'importe quel contexte,thème ouplugin,où lesbonnespratiques WordPress appropriées sont suivies.L'inconvénient lemoins évident de lapremièreméthodeest qu'elle utiliseplus demémoire que les appels AJAX activéspar WordPress,cartout l'environnement WordPressest chargé,carilestprésumé qu'unepagefrontale ou d'administration seragénérée.
L'ajout de NONCE avec
admin-ajax.php
offre une sécuritéintégrée simple.First, the obvious drawback to the first method is that it depends on your specific page, template, and permalink structure to all work correctly. Using
admin-ajax.php
will work correctly in any context, theme or plugin, where proper WordPress best practices are followed.The less obvious drawback to the first method is that it uses more memory than doing WordPress-enabled AJAX calls, since the whole WordPress environment is loaded, as it's presumed that a front-end or admin page will be output.
The addition of NONCEs with
admin-ajax.php
provides easy, built-in security.-
Pour être honnête,tout l'environnement WordPress + la zone d'administrationest également chargépour `admin-ajax.php`.La seule chose quiestignoréeest le chargeur demodèles.`admin-ajax.php`esttoujours labonnemanière,bien sûr.:)To be fair, the entire WordPress environment + the admin area is loaded for `admin-ajax.php` as well. The only thing that gets skipped is the template loader. `admin-ajax.php` is still the correct way, of course. :)
- 1
- 2012-07-22
- chrisguitarguy
-
- 2013-12-04
admin-ajax.php
n'estpastoujours labonne voie à suivre. Si vous cherchez à récupérer un article,parexemple,vouspouvezen faitmieux utiliser quelque chose commetemplate_redirect()
pour charger unmodèlepersonnalisé qui renvoie JSON (outout ce dont vous avezbesoin).Pourquoi? Miseen cache. Lorsque vous utilisez
admin-ajax.php
,vous éliminezfondamentalement lapossibilitépour certains systèmes de cache d'enregistrer la sortie de la réponse du serveur (généralement les URL d'administration,et enparticulier admin-ajax.php,ne devraientpasmisen cache). L'utilisation detemplate_redirect()
,d'autrepart,permet de conserver des URL distinctes que denombreuxplugins de cacheet accélérateurs HTTP seraient susceptibles d'utiliserpour conserver les données. Même certains systèmes demiseen cacheback-endpeuventne pas s'impliquer dansadmin-ajax.php
s'ils sont configuréspour éviter lamiseen cache lorsqueis_admin()
.Bien sûr,si vousn'obtenezpas quelque chose d'assez statique comme unepublication,lamiseen cachepourraiten fait être unetrèsmauvaise chose ... auquel cas
admin-ajax.php
est unbien meilleur choix .admin-ajax.php
isn't always the right way to go. If you're looking to fetch a post, for example, you may actually better off using something liketemplate_redirect()
to load a custom template that returns JSON (or whatever you need returned).Why? Caching. When you use
admin-ajax.php
you're basically eliminating the opportunity for some cache systems to save the output of the server response (generally admin URLs, and specifically admin-ajax.php, should not be cached). Usingtemplate_redirect()
on the other hand allows for maintaining separate URLs that many cache plugins and HTTP accelerators would be likely to use to keep the data. Even some back-end caching systems may not involve themselves inadmin-ajax.php
if they're configured to avoid caching whenis_admin()
.Of course, if you're not getting something fairly static like a post, caching could actually be a really bad thing... in which case
admin-ajax.php
is a far better choice.-
Pouvez-vous développer cela?Jene vois aucune raisonpour laquelle vousne pouvezpasmettreen cache un appel AJAXen utilisant `admin-ajax.php`.Can you expand upon this? I see no reason you can't cache an AJAX call using `admin-ajax.php`.
- 0
- 2013-12-04
- s_ha_dum
-
Sûr.Ilpeut êtreparfaitementpossible demettreen cache la requête DB,les objets,etc.impliqués dans un appel `admin-ajax.php`,je ne suisen faitpastrop sûr des détails à ce sujet.Mais si vous utilisez quelque chose quifait de lamiseen cachebasée sur les URL,`admin-ajax.php`ne serapasimpliqué -puisquetoutes vos requêtes AJAX sont destinées à cette URL avecjuste desparamètres différentspassés. Cependant,si vous suivez la route `template_redirect ()`,vos appels AJAXpour différentsmessages seronten fait des requêtes adressées à différentes URL,permettant à un système demiseen cachebasé sur les URL defonctionner demanièremagique.Sure. It may be perfectly possible to cache the DB query, objects, etc involved in an `admin-ajax.php` call, I'm actually not too sure about the details of that. But if you're using something that does URL-based caching, `admin-ajax.php` isn't going to be involved — since all your AJAX requests are to that one URL with just different parameters passed in. However, if you go the `template_redirect()` route, your AJAX calls for different posts will actually be requests to different URLs, allowing a URL-based caching system to work its magic.
- 0
- 2013-12-04
- Drywall
-
Vousparlez donc strictement de lamiseen cachebasée sur les URL,mais vous avezmentionné les hooks.Ilexiste un certainnombre de hooks qui devraientpermettre lamiseen cache des requêtes vers `admin-adjax.php`,ainsi que si l'OPpeut écrire lamiseen cache des objets dans les rappels.Je vous suggère demodifier la réponsepour la clarifier/lamettreen garde unpeu.So what you are talking about is strictly URL-based caching, but you mentioned hooks. There are a number of hooks that should allow caching of requests to `admin-adjax.php`, plus, if the OP can write object caching into the callbacks. I would suggest you edit the answer to clarify/caveat it a bit.
- 0
- 2013-12-04
- s_ha_dum
-
Merci.J'aimodifiépour éliminer la référence aux hameçonset clarifier.Lamiseen cachebasée sur l'URLest la situation laplus claire,mais comme lementionnema déclarationmodifiée,si le système demiseen cacheesten place,il recule dans la zone d'administration (ce quiest unepossibilitébien queje nepuisse vraimentpas dire que despluginsfont/ne fontpas)tfaites ça) alors vousmanqueztoujours quelque chose.Meilleur?Thanks. I have amended to eliminate the reference to hooks and to clarify. URL-based caching is the most clear-cut situation, but as my amended statement mentions, if whatever caching system is in place backs off within the admin area (which is a possibility though I can't definititely say any plugins do/don't do that) then you're still missing out. Better?
- 0
- 2013-12-04
- Drywall
Y a-t-il une raison d'utiliser admin-ajax.phppour les requêtes ajaxpar rapport à unmodèle depagepersonnalisé?
Jene connaissaispas admin-ajax.phpjusqu'à récemment,donc ce quej'avaisfaitest de créer unmodèle depagepersonnalisé comme celui-ci:
Et l'appel ajax serait à l'URL http://monsite.com/api/,oùj'aipublié unepage vierge à l'aide demonmodèle depage API. Cela sembleme donner accès àtoutesmesfonctions WordPresset cracher des données.
Cependant,récemment,j'ai lu sur admin-ajax.phpet j'ai compris qu'une autrefaçon de se connecter à labase de données WordPressest d'appeler l'URL http://monsite.com/wp-admin/admin-ajax.php et ont desfonctions comme celle-ci:
La connexion de lapremièremanièreest-elleincorrecte? Admin-ajax.phpfournit-il une sécurité supplémentaire ou quelque chose? Mercipourtoute contribution!