問題描述

我做了很多研究,沒有找到我正在尋找的東西,所以我希望能指出正確的方向。

我正在開發一個將從前端預訂機票的活動插件。這與任何其他表單提交沒有什麼不同,但是我感到困惑的是如何通過 OOP 與類編寫的插件來處理它。

大多數文章,我發現説把 $ _POST 處理在模板頁面。理想情況下,我想通過插件中的函數來處理這個問題。

我不太清楚的另一件事是當您在前端提交表單時,實際上如何傳遞給後台的函數。我希望從任何模板的詳細信息中完整地抽象表單處理。

// events.php
if ( ! class_exists( 'Events' ) ) {

    Class Events {
        function __construct() {
            add_action( 'plugins_loaded', array( &$this, 'includes' ), 1 );
        }

        function includes() {
            require_once( EVENTS_INCLUDES . 'functions.php' );
        }
    }
}

if ( class_exists( 'Events' ) ) {
    $events_load = New Events();
}


// functions.php
function process_form() {
    ...do form processing here...

    ...insert booking...
}

我不知道該怎麼抓住那個,或者發送表單動作的地方。感謝所有的幫助!

-亞當

最佳解決方案

將表單動作發送到您的主頁或特定頁面網址。您不能在模板中處理 $ _POST,因為您需要在進程之後重定向,並且重定向需要在任何 HTML 輸出之前觸發。

// you should choose the appropriate tag here
// template_redirect is fired just before any html output
// see - http://codex.wordpress.org/Plugin_API/Action_Reference
add_action('template_redirect', 'check_for_event_submissions');

function check_for_event_submissions(){
  if(isset($_POST['event'])) // && (get_query_var('pagename') === 'events)
    {
       // process your data here, you'll use wp_insert_post() I assume

       wp_redirect($_POST['redirect_url']); // add a hidden input with get_permalink()
       die();
    }

}

您還可以檢查 nonce 以確保數據是從正確的地方提交的…

參考文獻

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