質問: ワードプレスでajax呼び出しとjsonを管理する方法 私はjqueryを通してアクセスしたいカスタム投稿タイプを持っています - できればjsonを使用してください。それで最初のこと。/echos jsonを返す関数を作成するのは簡単ですが、jqueryを使用してどのようにしてアクセスするのでしょうか。マイクが/に書いているように この質問 、彼は - 私の知る限りでは - それをワードプレスのルートに置いている。これはphpファイル名を使用してアクセス可能にするでしょう - しかしこれはお勧めですか?私はむしろそれをプラグインフォルダの中に置くことを望みます。私はwordpressコーデックスを読んでみましたが、それが管理ページではないとしても、あなたがadmin-ajax.phpにすべてのajax呼び出しを投稿しているので、ajax呼び出しが処理される方法は私を混乱させるだけですか?誰かが私が抱えている問題を真っ直ぐにしてください。/嵐編集私が抱えていた問題は、どのようにしてajax呼び出しがワードプレスで行われるのか、そして呼び出しを行うためのphpおよびjsコードを配置する場所を理解することでした。私がリンクした他の質問では、あなたはファイルをwpルートに置く関数を作成しました - 私はそれをしたくありません。しかし、私は今wp_ajax_(nopriv _)[action]の使い方を学び、そして私が作成したjsonに効果的にアクセスすることができます。残っている問題は私が電話をかけるためにjsを置くべき場所です。私はそれをplugins jsファイルに置きたいのですが、これは管理サイトのnotページに表示されるので、ajaxurlは定義されていないので、私はphpを使用してエコーする必要があります。echo admin_url('admin-ajax.php'); 問題は、このphpとjavascriptをどのように組み合わせればよいのか、そしてファイルやスクリプトではないのでどうやってエンキューするのかということです。
回答: ajaxハンドラajaxハンドラーがwp-admin/ディレクトリーにあるのは確かに少し混乱しますが、そうです、管理者以外の要求にも使用でき、使用する必要があります。その後、通常のwp_ajax_nopriv_[action]ではなく、wp_ajax_[action]フックのハンドラーを登録します。この場合、ログインしていないユーザーによって行われた要求はすでに50行目のまわりにあるので、 admin-ajax.php の最初の行に従うだけで済みます。それで、フックwp_ajax_nopriv_get_custom_post_dataのための関数を登録してください、そして、あなたがactionパラメータをadmin-ajax.phpにセットしてget_custom_post_dataを要求するならば、それは呼ばれます。必ず自分自身のハンドラの最後でdie()を呼び出すようにしてください。そうしないと、デフォルトのdie(-1)が返されます。また、ログインバージョンのwp_ajax_get_custom_post_dataを登録しても(同じハンドラ関数に問題はありません)、自分のサイトにログインしている場合はnoprivフックはヒットしません。javascriptに対するサーバー側の設定(admin-ajax.phpのurlのような)サーバーサイドの設定データを送信するための秘訣は 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)、そして更新後のブラウザのキャッシュ要求の後に追加されるバージョン番号を指定します。