問題描述

我有一個自定義的 post 類型,我想通過 jQuery 訪問 – 最好使用 JSON 。

首先是事情。創建返回/echos json 的函數是很容易的,但是如何通過 jquery 訪問它。

正如 Mike 在 this question 中寫道,他 – 據我所知,他將它放在 wordpress 根目錄下。這將使其可訪問使用 php 文件名 – 但這是推薦嗎?我寧願把它放在一個插件文件夾中。

我已經嘗試閲讀 wordpress codex,但是 ajax 調用的方式只是混淆我,因為你發佈每個 ajax 調用 admin-ajax.php,即使它不是一個管理頁面?

有人可以解決我遇到的問題嗎?

/風暴

編輯

我遇到的問題是瞭解如何在 wordpress 中進行 ajax 調用,以及在哪裏放置您的 php 和 js 代碼來執行/處理調用。

在另一個我鏈接的問題中,您創建了將文件放在 wp 根目錄中的函數 – 我不想這樣做。但是我現在已經學會瞭如何使用 wp_ajax_(nopriv _)[action],並且可以有效地訪問我創建的 json 。剩下的問題是我應該放置 JS 來進行通話。我想將它放在插件 js 文件中,但是由於這是在一個頁面中呈現的,而不是在管理站點上,ajaxurl 沒有定義,所以我必須使用 php 進行回顯。

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

所以問題是我應該如何將這個 PHP 與 javascript 結合起來,然後我如何排隊它,看到它不是一個文件或一個腳本。

最佳解決方案

Ajax 處理程序

確實有點混亂,Ajax 處理程序在 wp-admin/目錄中,但是,您可以並且應該將其用於 non-admin 請求。然後,為 wp_ajax_nopriv_[action]鈎子註冊一個處理程序,而不是正常的 wp_ajax_[action]。在這種情況下,您只需遵循 admin-ajax.php 的第一行,因為未登錄的用户完成的請求已經離開了第 50 行。

所以註冊一個掛鈎 wp_ajax_nopriv_get_custom_post_data 的功能,如果您要求 action 參數設置為 get_custom_post_data admin-ajax.php,它將被調用。一定要在你的處理程序的最後調用 die(),否則返回默認的 die(-1)。並且還註冊了 logged-in 版本,wp_ajax_get_custom_post_data(同樣的處理函數,沒有問題),因為如果你登錄到你的站點,你不會碰到 nopriv 鈎子。

Server-side 配置為 Javascript

發送 server-side 配置數據的技巧 (如 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’s answer to a similar question

從插件目錄靜態 Javascript

要從您自己的插件目錄中加載靜態 Javascript 文件,請使用 wp_enqueue_script()。這樣會看起來像這樣:

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

storm_json 再次是一個句柄名稱,那麼你可以給出文件的鏈接,然後給出依賴關係 (可以是 null),然後在請求之後添加一個版本號,以便在更新時跳過瀏覽器緩存。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。