2015-09-27 134 views
0

我正在編寫一個WordPress插件,它具有一個AJAX元素 - HTML塊由前端從插件使用AJAX提取。由插件生成的WordPress中的完全自定義頁面

我在這裏拼圖時遇到困難,我懷疑這只是一個術語問題。我將如何實現由插件完全提供的頁面?

  • 該頁面的內容將是HTML - 插件可以生成此響應POST或GET參數。
  • 需要有一個路由到這個頁面。該路線不必是用戶友好的或REST風格 - 只是某種到達插件的URI。是否有辦法用一個任意名稱註冊一個自定義頁面,而不必將其創建爲WP帖子?
  • 我希望所有這些都是自包含在插件中,因此不應該讓管理員必須創建帖子或頁面,或者不得不添加任何內容到主題中。
  • 理想情況下,我會避免任何進入wp-admin目錄的URL。最終用戶不屬於這裏。
+0

我發現了一個很好的解釋,導致我在這裏找到了一個解決方案:https://willnorris.com/2009/06/wordpress-plugin-pet-peeve-2-direct-calls-to-plugin-files我將把它作爲答案進行擴展,但仍然會很高興聽到低級別的URL解析是如何工作的。 – Jason

回答

0

我強烈建議參照https://codex.wordpress.org/AJAX_in_Plugins#Ajax_on_the_Viewer-Facing_Side

你需要在你的插件目錄中的PHP腳本,返回你要求什麼,你需要確定URL在運行時爲您的阿賈克斯參考。上面的鏈接給出了排隊和使用wp_localize_script()爲自定義php腳本提供url的示例。

wp_enqueue_script('ajax-script', 
     plugins_url('/js/my_query.js', __FILE__), array('jquery')); 

    // in JavaScript, object properties are accessed as 
    // ajax_object.ajax_url, ajax_object.we_value 
    wp_localize_script('ajax-script', 'ajax_object', 
      array('ajax_url' => plugins_url('/php/myapi.php')); 

你的JavaScript文件將被包含在每一頁上,並會監聽需要HTML塊頁面上的事件,就像你描述它。

你的文件myapi.php然後需要接受一個請求,可能使用查詢字符串,從wordpress api獲取適當的內容,並用你的javascript將放置的所述內容作出響應。


要訪問WordPress的API,以及雖然,你有兩個選擇:

  1. 隊WordPress的運行開始你的文件,由including wp-load.php。這可能不是最乾淨的方式。
  2. 設置一個custom page or slug指向您的插件。

我會建議第二個選項,並建議一塞,在這種情況下,你會發現這篇文章有幫助:wp_rewrite in a WordPress Plugin


從傑森的評論,基於上面的鏈接:

重寫規則被提及了很多,但真的是一個分心 - 他們只是幫助使URL看起來更「友好」,這不是一個 目標在這裏。關鍵是:註冊一個自定義的GET參數;在頁面渲染過程的早期尋找 那個參數;如果您發現 參數已設置,則輸出/回聲填充和die()。有一個 可用於查看參數的鉤子數量,選擇 取決於您希望WP設置並首先處理多少。

+0

那麼自定義myapi.php會完全脫離WordPress的環境嗎?它需要訪問WP設置,功能,瞬變。我不是在尋找一個完全獨立的腳本。 'wp_localize_script'是將數據傳遞給JS腳本的一個好的方面。 – Jason

+0

@Jason好點,看我的編輯 – enigma

+0

這裏的第一個答案是我用的:http://stackoverflow.com/questions/2210826/wp-rewrite-in-a-wordpress-plugin/2487407重寫規則提到了一個很多,但真的是一個分心 - 他們只是幫助使URL看起來更「友好」,這不是一個目標。關鍵是:註冊一個自定義的GET參數;在頁面呈現過程的早期查找該參數;如果你發現參數已設置,那麼輸出/ echo的東西和'死()'。有很多鉤子可以用來查看參數,選擇取決於您希望WP設置和首先處理多少。 – Jason

相關問題