插件表格提交最佳实践


16

我已经做了很多研究,但是没有找到我想要的东西,因此我希望可以指出正确的方向。

我正在开发一个Events插件,它将从前端预订票证。这与其他任何Form提交都没有什么不同,但是让我感到困惑的是如何处理通过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...
}

我不知道该挂什么,也不确定在哪里发送表单动作。感谢您的所有帮助!

-亚当


在process_form()中是否有一个更完整的逻辑示例。我很想知道您要采取什么措施来确保正确提交表单。
emeraldjava

Answers:


8

将表单操作发送到您的主页或特定的页面URL。您无法在模板中进行$ _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();
    } 

}

您还可以检查随机数以确保数据是从正确的位置提交的...


我已经非常接近该解决方案,但使用的是init而不是template_redirect。我没有想到使用重定向,但是它比试图弄清楚发生了什么要简单得多。我已经在检查随机数,只需要获得所有JS表单和服务器端表单验证即可。感谢您的帮助,我为此付出了很多努力,但现在已经很有意义了。
2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.