it-swarm-ja.com

ワードプレスで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をどのように組み合わせればよいのか、そしてファイルやスクリプトではないのでどうやってエンキューするのかということです。

12
Storm

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)、そして更新後のブラウザのキャッシュ要求の後に追加されるバージョン番号を指定します。

17
Jan Fabry