我做了很多研究,还没有找到我想要的东西,所以我希望我能被指引到正确的方向。
我正在开发一个事件插件,可以从前端预订门票。这与任何其他表单提交都没有什么不同,但让我感到困惑的是,如何从一个通过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...
}
我不确定该挂接什么才能捕捉到它,也不确定表单动作应该发送到哪里。谢谢你的帮助!
-亚当
最合适的回答,由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 为了确保数据从正确的位置提交。。。