admin-ajax.phpとAjaxリクエストのカスタムページテンプレート
-
-
ところで:ワードプレスサイトでAPIを作成し、APIリクエストURLとして意味のあるURLが必要な場合.次に、modの書き換えを行って、 `http://site.com/api/`が `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 回答
- 投票
-
- 2012-07-22
まず、最初の方法の明らかな欠点は、すべてが正しく機能するように、特定のページ、テンプレート、およびパーマリンク構造に依存することです.
admin-ajax.php
を使用すると、適切なWordPressのベストプラクティスに従っているすべてのコンテキスト、テーマ、またはプラグインで正しく機能します.最初の方法のそれほど明白な欠点は、フロントエンドまたは管理ページが出力されると想定されるため、WordPress環境全体が読み込まれるため、WordPress対応のAJAX呼び出しを行うよりも多くのメモリを使用することです.
admin-ajax.php
でNONCEを追加すると、簡単な組み込みのセキュリティが提供されます.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.-
公平を期すために、WordPress環境全体と管理領域が `admin-ajax.php`にも読み込まれます.スキップされるのはテンプレートローダーだけです.もちろん、 `admin-ajax.php`はまだ正しい方法です.:)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
が常に正しい方法であるとは限りません.たとえば、投稿を取得する場合は、template_redirect()
などを使用して、JSON(または必要なもの)を返すカスタムテンプレートを読み込む方がよい場合があります.なぜですか?キャッシング.
admin-ajax.php
を使用すると、基本的に、一部のキャッシュシステムがサーバー応答の出力を保存する機会がなくなります(通常、管理URL、特にadmin-ajax.phpは保存しないでください).キャッシュ).一方、template_redirect()
を使用すると、多くのキャッシュプラグインやHTTPアクセラレータがデータを保持するために使用する可能性が高い個別のURLを維持できます.一部のバックエンドキャッシングシステムでさえ、admin-ajax.php
のときにキャッシングを回避するように構成されている場合、admin-ajax.php
に関与しない場合があります.もちろん、投稿のようにかなり静的なものが得られない場合、キャッシュは実際には本当に悪いことかもしれません...その場合は
admin-ajax.php
がはるかに良い選択です.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.-
これを拡張できますか?`admin-ajax.php`を使用してAJAX呼び出しをキャッシュできない理由はわかりません.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
-
承知しました.`admin-ajax.php`呼び出しに関連するDBクエリ、オブジェクトなどをキャッシュすることは完全に可能かもしれませんが、実際にはその詳細についてはあまりよくわかりません.ただし、URLベースのキャッシュを行うものを使用している場合は、 `admin-ajax.php`は関与しません.すべてのAJAXリクエストは、異なるパラメータが渡された1つのURLに対して行われるためです. ただし、 `template_redirect()`ルートを使用すると、さまざまな投稿に対するAJAX呼び出しは、実際にはさまざまなURLへのリクエストになり、URLベースのキャッシュシステムがその魔法を働かせることができます.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
-
つまり、あなたが話しているのは厳密にURLベースのキャッシュですが、フックについて言及しました.`admin-adjax.php`へのリクエストのキャッシュを許可する必要があるフックがいくつかあります.さらに、OPがオブジェクトキャッシングをコールバックに書き込むことができる場合.答えを編集して、少し明確にする/警告することをお勧めします.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
-
ありがとう.フックへの参照を削除し、明確にするために修正しました.URLベースのキャッシングは最も明確な状況ですが、私の修正されたステートメントが述べているように、キャッシングシステムが管理領域内でバックオフする場合(これは、プラグインが行う/しないと明確に言うことはできませんが可能性があります)それをする)そしてあなたはまだ逃している.良いですか?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
カスタムページテンプレートではなく、ajaxリクエストにadmin-ajax.phpを使用する理由はありますか?
最近までadmin-ajax.phpについて知らなかったので、私が行っていたのは、次のようなカスタムページテンプレートを作成することです.
そして、ajaxの呼び出しはURL http://mysite.com/api/になります. APIページテンプレートを使用して空白のページを公開しました.これにより、WordPressのすべての機能にアクセスし、データを吐き出すことができるようです.
しかし、最近admin-ajax.phpを読んで、WordPressデータベースに接続する別の方法がURL http://mysite.com/wp-admin/admin-ajax.php で、次のような機能があります:
最初の方法で接続するのは間違っていますか? admin-ajax.phpは追加のセキュリティか何かを提供しますか?ご意見ありがとうございます!