问题描述
我做了很多研究,没有找到我正在寻找的东西,所以我希望能指出正确的方向。
我正在开发一个将从前端预订机票的活动插件。这与任何其他表单提交没有什么不同,但是我感到困惑的是如何通过 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。