admin-ajax.php vs plantilla de página personalizada para solicitudes Ajax
-
-
Por cierto: si desea crear una APIen su sitio de WordPress y desea una URL quetenga sentido como URL de solicitud de API.Luegopuede hacer unpoco de reescritura demodpara que `http://site.com/api/` se asigne a `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 respuestas
- votos
-
- 2012-07-22
Primero,elinconveniente obvio delprimermétodoes que depende de supáginaespecífica,plantilla yestructura deenlacespermanentespara quetodofuncione correctamente.El uso de
admin-ajax.php
funcionará correctamenteen cualquier contexto,tema o complemento,donde se sigan lasmejoresprácticas adecuadas de WordPress.Elinconvenientemenos obvio delprimermétodoes que usamásmemoria que las llamadas AJAX habilitadaspara WordPress,ya que se cargatodoelentorno de WordPress,ya que sepresume que segenerará unapágina de administración o defront-end.
La adición de NONCE con
admin-ajax.php
proporciona una seguridadintegrada y sencilla.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.-
Para serjustos,todoelentorno de WordPress +el área de administracióntambién se cargapara `admin-ajax.php`.Lo único que se omiteesel cargador deplantillas.`admin-ajax.php` sigue siendo laforma correcta,por supuesto.:)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
no siempreesel camino correcto. Siestábuscando obtener unapublicación,porejemplo,esmejor que use algo comotemplate_redirect()
para cargar unaplantillapersonalizada que devuelva JSON (o lo que sea quenecesite devolver).¿Por qué? Almacenamientoen caché. Cuando usa
admin-ajax.php
,básicamenteestáeliminando la oportunidad de que algunos sistemas de cachéguardenel resultado de la respuesta del servidor (generalmente,las URL de administrador,yespecíficamente admin-ajax.php,no deberían seren caché). El uso detemplate_redirect()
por otro ladopermitemantener URL separadas quemuchos complementos de caché y aceleradores HTTPprobablemente usaríanparamantener los datos. Incluso algunos sistemas de almacenamientoen cachéback-endpuedennoinvolucrarseenadmin-ajax.php
siestán configuradosparaevitarel almacenamientoen caché cuandois_admin()
.Por supuesto,sino obtiene algobastanteestático como unapublicación,el almacenamientoen cachépodría ser algo realmentemalo ...en cuyo caso
admin-ajax.php
es una opciónmuchomejor .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.-
¿Puedes ampliaresto?No veoninguna razónpor la quenopueda almacenaren caché una llamada AJAX usando `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
-
Por supuesto.Puede serperfectamenteposible almacenaren caché la consulta de labase de datos,los objetos,etc.involucradosen una llamada `admin-ajax.php`,en realidadnoestoymuy seguro de los detalles deeso.Pero siestá usando algo que haceel almacenamientoen cachébasadoen URL,`admin-ajax.php`noestaráinvolucrado,ya quetodas sus solicitudes AJAX sonparaesa URL con solo diferentesparámetrospasados. Sinembargo,si sigue la ruta `template_redirect ()`,sus llamadas AJAXpara diferentespublicacionesen realidad serán solicitudes a diferentes URL,lo quepermitirá que un sistema de almacenamientoen cachébasadoen URL haga sumagia.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
-
Entonces,de lo queestás hablandoes del almacenamientoen cachéestrictamentebasadoen URL,peromencionasteganchos.Hay una serie deganchos que deberíanpermitirel almacenamientoen caché de solicitudes a `admin-adjax.php`,además,siel OPpuedeescribirel almacenamientoen caché de objetosen las devoluciones de llamada.Le sugiero queedite la respuestapara aclararla/advertirla unpoco.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
-
Gracias.Hemodificadoparaeliminar la referencia a losganchos ypara aclarar.El almacenamientoen cachébasadoen URLes la situaciónmás clara,pero comomencionami declaraciónenmendada,si cualquier sistema de almacenamientoen caché queestéen su lugar retrocede dentro del área de administración (lo cuales unaposibilidad,aunque definitivamentenopuedo decir queningún complemento lo haga/no)hacereso)entoncestodavíate estásperdiendo.¿Mejor?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
¿Hay alguna razónpara usar admin-ajax.phppara solicitudes ajaxen lugar de unaplantilla depáginapersonalizada?
No conocía admin-ajax.php hasta hacepoco,así que lo que habíaestado haciendoes crear unaplantilla depáginapersonalizada comoesta:
Y la llamada ajax sería a la URL http://mysite.com/api/,quees donde hepublicó unapáginaen blanco usandomi plantilla depágina API. Estoparece darme acceso atodasmisfunciones de WordPress yescupir datos.
Sinembargo,recientemente leí sobre admin-ajax.php yentiendo que otraforma de conectarse a labase de datos de WordPresses llamar a la URL http://mysite.com/wp-admin/admin-ajax.php ytienen funciones comoesta:
¿Estámal conectar laprimeraforma? ¿Admin-ajax.phpproporciona seguridad adicional o algo así? ¡Graciaspor cualquierentrada!