admin-ajax.php vs Benutzerdefinierte Seitenvorlage für Ajax-Anfragen
-
-
Übrigens: Wenn Sieeine API auf Ihrer WordPress-Siteerstellenmöchten undeine URLmöchten,die als API-Anforderungs-URL sinnvollist.Dann können Sieeinige Mod-Umschreibungen vornehmen,sodass "http://site.com/api/" "http://site.com/wp-admin/admin-ajax.php" zugeordnet wirdBTW: 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 Antworten
- Stimmen
-
- 2012-07-22
Erstensbesteht der offensichtliche Nachteil derersten Methode darin,dasses von Ihrer spezifischen Seite,Vorlage und Permalink-Struktur abhängt,ob alle ordnungsgemäßfunktionieren.Die Verwendung von
admin-ajax.php
funktioniertin jedem Kontext,Thema oder Plugin,in dem die richtigen Best Practicesfür WordPressbefolgt werden.Der weniger offensichtliche Nachteil derersten Methodebesteht darin,dass siemehr Speicherbenötigt als WordPress-fähige AJAX-Aufrufe,da diegesamte WordPress-Umgebunggeladenist,da davon ausgegangen wird,dasseine Front-End- oder Admin-Seite ausgegeben wird.
Das Hinzufügen von NONCEsmit
admin-ajax.php
bietet eineeinfache,integrierte Sicherheit.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.-
Umfair zu sein,wird diegesamte WordPress-Umgebung + der Admin-Bereich auchfür `admin-ajax.php`geladen.Daseinzige,was übersprungen wird,ist der Template Loader.`admin-ajax.php`istnatürlichimmernoch der richtige Weg.:) :)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
istnichtimmer der richtige Weg. Wenn Siebeispielsweiseeinen Beitrag abrufenmöchten,istesmöglicherweisebesser,wenn Sietemplate_redirect()
verwenden,umeine benutzerdefinierte Vorlage zu laden,die JSON zurückgibt (oder was auchimmer Sie zurückgebenmüssen).Warum? Caching. Wenn Sie
admin-ajax.php
verwenden,wirdfüreinige Cache-Systeme die Möglichkeit,die Ausgabe der Serverantwort zu speichern,grundsätzlich ausgeschlossen (im Allgemeinen sollten dies keine Administrator-URLs undinsbesondere admin-ajax.php sein zwischengespeichert). Die Verwendung vontemplate_redirect()
ermöglicht andererseits die Verwaltung separater URLs,die wahrscheinlich von vielen Cache-Plugins und HTTP-Beschleunigern zum Speichern der Daten verwendet werden. Selbsteinige Back-End-Caching-Systeme sindmöglicherweisenicht anadmin-ajax.php
beteiligt,wenn sie so konfiguriert sind,dass das Cachingbeiis_admin()
vermieden wird.Wenn Sienichtetwas ziemlich Statisches wieeinen Beitragerhalten,kann das Zwischenspeicherntatsächlicheine wirklich schlechte Sache sein. In diesem Fallist
admin-ajax.php
eine weitausbessere Wahl .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.-
Können Sie dasnähererläutern?Ich sehe keinen Grund,warum Sieeinen AJAX-Aufrufnichtmit `admin-ajax.php` zwischenspeichern können.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
-
Sicher.Esistmöglicherweise durchausmöglich,die DB-Abfrage,Objekte usw.,die aneinem Aufruf von "admin-ajax.php"beteiligt sind,zwischenzuspeichern. Ichbin mir über die Detailsnicht sicher.Wenn Siejedochetwas verwenden,das URL-basiertes Caching ausführt,ist "admin-ajax.php"nichtbeteiligt,da alle Ihre AJAX-Anforderungen an dieseeine URLmit nur unterschiedlichen Parameterngesendet werden. Wenn Siejedoch die Route "template_redirect ()" wählen,werden Ihre AJAX-Aufrufefür verschiedene Poststatsächlich Anforderungen an verschiedene URLs sein,sodassein URL-basiertes Caching-System seine Wirkungentfalten kann.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
-
Sie sprechen also ausschließlich von URL-basiertem Caching,aber Sie haben Hookserwähnt.Esgibt eine Reihe von Hooks,die das Zwischenspeichern von Anforderungen an `admin-adjax.php`ermöglichen sollen,sowie wenn das OP das Zwischenspeichern von Objektenin die Rückrufe schreiben kann.Ich würde vorschlagen,dass Sie die Antwortbearbeiten,um sieein wenig zu klären/zubeschränken.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
-
Vielen Dank.Ich habegeändert,um den Verweis auf Haken zu streichen und zu verdeutlichen.URL-basiertes Cachingist dieeindeutigste Situation,aber wiein meinergeänderten Erklärungerwähnt,zieht sich das vorhandene Caching-Systemim Admin-Bereich zurück (waseine Möglichkeitist,obwohlichnicht definitiv sagen kann,dass Plugins diestun/nichttun).tmach das) dann verpasst duesimmernoch.Besser?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
Gibteseinen Grund,admin-ajax.phpfür Ajax-Anfragenim Vergleich zueinerbenutzerdefinierten Seitenvorlage zu verwenden?
Ich wusstebis vor kurzemnichts über admin-ajax.php. Ich habe alsoeine benutzerdefinierte Seitenvorlage wie diefolgendeerstellt:
Und der Ajax-Aufruf würde an die URL http://mysite.com/api/gehen,woich habe hateine leere Seitemit meiner API-Seitenvorlage veröffentlicht. Dies scheintmir Zugriff auf allemeine WordPress-Funktionen zugeben und Daten auszuspucken.
Vor kurzem habeichjedoch admin-ajax.phpgelesen und verstanden,dasseine andere Möglichkeit,eine Verbindung zur WordPress-Datenbank herzustellen,darinbesteht,die URL http://mysite.com/wp-admin/admin-ajax.php und habenfolgende Funktionen:
Istesfalsch,denersten Weg zu verbinden? Bietet admin-ajax.php zusätzliche Sicherheit oder ähnliches? Vielen Dankfürjede Eingabe!