插件表单提交最佳实践

时间:2011-06-28 作者:alistek

我做了很多研究,还没有找到我想要的东西,所以我希望我能被指引到正确的方向。

我正在开发一个事件插件,可以从前端预订门票。这与任何其他表单提交都没有什么不同,但让我感到困惑的是,如何从一个通过OOP和类编写的插件中处理它。

我发现的大多数文章都说将$\\u 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...
}
我不确定该挂接什么才能捕捉到它,也不确定表单动作应该发送到哪里。谢谢你的帮助!

-亚当

1 个回复
最合适的回答,由SO网友:onetrickpony 整理而成

将表单操作发送到主页或特定页面URL。模板中不能有$\\u 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 为了确保数据从正确的位置提交。。。

结束

相关推荐

Get paged outside of loop?

是否可以在标准WP循环之外进行寻呼?我已经在循环中使用了:<?php if ( $paged >= 2 ) { ?> Some text for the 2nd page on up <?php } ?> 但我希望能够在第二页或更大的所有页面上,在循环之外回显一些文本。可能的还是更好的方法?