WordPressでAjax呼び出しとJSONを管理する方法


13

jQueryを介してアクセスしたいカスタムポストタイプがあります-できればJSONを使用してください。

まず最初に。JSONを返す/エコーする関数を作成するのは簡単ですが、jqueryを使用してどのようにアクセスしますか。

マイクがこの質問で書いているように、彼は-私が理解している限り-ワードプレスのルートにそれを置きます。phpファイル名を使用してアクセスできるようになりますが、これはお勧めですか?むしろ、プラグインフォルダー内に配置します。

私はワードプレスのコーデックスを読んでみましたが、管理ページではないにもかかわらず、すべてのajax呼び出しをadmin-ajax.phpに投稿しているので、ajax呼び出しの処理方法は私を混乱させますか?

誰かが私が抱えている問題を解決してくれませんか?

/嵐

編集する

私が抱えていた問題は、wordpressでajax呼び出しを行う方法と、呼び出しを実行/処理するためにphpおよびjsコードを配置する場所を理解することでした。

私がリンクした他の質問では、あなたはwpルートにファイルを置く関数を作成しました-私はそれをしたくありません。しかし、wp_ajax_(nopriv _)[action]の使用方法を学び、作成したjsonに効果的にアクセスできます。残っている問題は、呼び出しを行うためにJSを配置する場所です。私は、プラグインのjsファイルに配置したいのですが、このページで提示されるように、ではない私は、PHPを使用してエコーする必要があるので、adminサイト上で、ajaxurlは、定義されていません。

echo admin_url('admin-ajax.php');

したがって、質問は、このphpをjavascriptとどのように組み合わせる必要があり、それをどのようにキューに入れて、ファイルまたはスクリプトではないかを確認する必要があります。


質問のタイトルを編集して、より説明的なタイトルを付けたいと思いますが、読んだ後でも、質問が何であるかが100%わかりません。カスタムポストタイプとは無関係に、JSONフィードにアクセスする方法を単純に尋ねていますか(CPTは実際には質問にインポートされていませんか?)、ルートにないことが重要ですか?管理機能用ですか?苦労している技術的なアプローチに加えて、エンドユーザーの視点から実際に達成しようとしていることを説明すると役立つかもしれません。
MikeSchinkel

ええ、私はタイトルがこれまでで最も説明的ではないことを認めることができます。最初はもっと悪いものを投稿したので、そこに何かを置いただけです。詳細情報を含む投稿を編集しました。
ストーム

人気のあるjson-apiプラグインは実際にはcustom-post-typeをカバーしないため、私が入れたばかりのカスタムpostタイプ。

回答:


17

Ajaxハンドラー

実際、Ajaxハンドラーがwp-admin/ディレクトリにあることは少し混乱しますが、はい、それは管理者以外の要求にも使用できます。次にwp_ajax_nopriv_[action]、通常の代わりに、フックのハンドラーを登録しwp_ajax_[action]ます。この場合、ログインしていないユーザーが行ったリクエストはすでに50行目付近のページを離れるため、の最初の行admin-ajax.phpに従うだけで済みます。

そのため、フック用の関数を登録すると、パラメータをに設定してwp_ajax_nopriv_get_custom_post_data要求するadmin-ajax.phpと呼び出されます。ハンドラーの最後で必ず呼び出してください。そうしないと、デフォルトが返されます。また、サイトにログインしている場合はフックをヒットしないため、ログインバージョンも登録します(同じハンドラー関数に問題ありません)。actionget_custom_post_datadie()die(-1)wp_ajax_get_custom_post_datanopriv

Javascriptへのサーバー側の設定

サーバー側の構成データ(admin-ajax.phpURLなど)を送信する秘The はwp_localize_script()です。ページの上部に含まれるキーと値の配列を渡します。これはおそらくローカライズ可能な文字列用に最初に作成されたものですが、これを使用して構成データを渡すこともできます。

wp_localize_script('storm_json_config', 'storm_config', array(
    'ajaxurl' => admin_url('admin-ajax.php'),
));

storm_json_configハンドル名(後でキューからstorm_config取り出す場合)は、データを含むJavascriptオブジェクトの名前です。したがって、静的Javascriptファイルにはのような行を含めることができますjQuery.post(storm_config.ajaxurl, ...)

同様の質問に対するbueltgeの回答も参照してください。

プラグインディレクトリからの静的Javascript

独自のプラグインディレクトリから静的なJavaScriptファイルを読み込むには、を使用しますwp_enqueue_script()。これは次のようになります。

wp_enqueue_script('storm_json', plugin_dir_url(__FILE__) . 'js/json.js', array('jquery'), '20101105');

storm_json再びハンドル名がある場合は、ファイルへのリンク、依存関係(可能性ありnull)、更新時にブラウザキャッシュをビートする要求の後に追加されるバージョン番号を指定します。


素晴らしい答え。これは私が不思議に思っていたことであり、私はそれが機能するようになったようです。/wp-admin/admin-ajax.php?action=[action]にアクセスして、jsonの結果を取得できます。私の問題は、ajas呼び出しを行うためにjsを配置する場所です。echo admin_url( 'admin-ajax.php');を配置する必要があるため、URLとして、プラグインのjsファイルに配置できません。それでは、どうすればキューに登録できますか?スクリプトをページの中央に印刷したいだけではありません。
ストーム

@Storm:で答えを拡張しましたwp_localize_script()。これを使用して、サーバー側からブラウザに構成データを送信できます。(小さなヒント:@ユーザー名に追加すると、その人はあなたの返信の通知を受け取ります。だから@Mike: I updated the title彼はあなたのコメントを見るようにします)
Jan Fabry

1月に感謝します。パッケージ全体を理解できたと思います。完全に理解するためにすべてをいじる必要がありますが、あなたは大きな助けになりました!回答は受け入れられました=)ところで@メモをありがとう。しかし、私は今あなたの答えについてコメントしているので、あなたはまだ正しい警告を受け取るでしょうか?
ストーム

@Storm:はい、アラートはあなたがコメントしている質問または回答の作者に送られます。さらに、@コメントで言及した別の参加者に送られます。したがって、「無料」で通知を受け取りましたが、あなたを含めなかった場合、このメッセージで通知を受け取ることはできません。Stack Exchangeネットワークの一般的なメタサイトに関する詳細な説明があります。
ヤンファブリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.