问题描述

我做了很多研究,没有找到我正在寻找的东西,所以我希望能指出正确的方向。

我正在开发一个将从前端预订机票的活动插件。这与任何其他表单提交没有什么不同,但是我感到困惑的是如何通过 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。