問題描述
我有一個自定義的 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。