我正在开发一个插件,在插件激活时创建一个自定义表。该插件允许用户添加一个表单快捷码来收集潜在客户的数据。
我已经到了这样的地步:要么保存数据,但无法创建新帖子(在WP编辑器中点击“发布”按钮时,我将获得“已发送的标题”),要么,我能够创建新帖子,表单确实通过快捷码显示,但数据不会保存到数据库。
我一直在胡思乱想,想弄清楚我做错了什么。
如果能在正确的方向上提供帮助,我们将不胜感激。
这是表单流程代码。
//Process form data
function el_process_form(){
if (isset($_POST[\'everlead\'])) {
if( $_SERVER[\'REQUEST_METHOD\'] == \'POST\' && !empty( $_POST[\'post_type\'] ) && $_POST[\'post_type\'] == "everlead"){
$name = stripcslashes($_POST["name"]);
$email = stripcslashes($_POST["email"]);
$phone = stripcslashes($_POST["phone"]);
$website = stripcslashes($_POST["website"]);
// Do some minor form validation to make sure there is content
if (trim($name) == "" ) {
echo \'Please enter your name. <br />\';
}
if (trim($email) == "" ) {
echo \'Please enter a valid email address.<br/>\';
}
if (trim($phone) == "" ) {
echo \'Please enter a contact number.<br/>\';
}
if (trim($website) == "" ) {
echo \'Please enter your website url.<br/>\';
}
global $wpdb;
//Set time
$formtime = date(\'m-d-Y h:i:a\');
$ipaddress = $_SERVER[\'REMOTE_ADDR\'];
//Table data
$data = array(
\'name\' => $name,
\'email\' => $email,
\'phone\' => $phone,
\'website\' => $website,
\'date\' => $formtime,
\'ipaddress\' => $ipaddress
);
//set lead data
$table = $wpdb->prefix . \'el_leads\';
$wpdb->insert( $table, $data, array(\'%s\', \'%s\', \'%s\', \'%s\', \'%s\') );
}
}
}
add_action( \'init\', \'el_process_form\' );
上面的代码有一个奇怪的地方^^^。如果在本地服务器(xampp)上删除
if (isset($_POST[\'everlead\'])) {
但是,当我在一个实时站点上时,会出现“headers ready sent”错误
此外,如果在表单处理之前添加此If语句,则无法将数据保存到数据库中。
function el_process_form(){
if(isset($_POST[\'post_type\'])){
...process form data
}
}
add_action(\'init\', \'el_process_form\' );
上面的代码允许我创建一个新帖子(如前一段所述),但数据不会保存。
最合适的回答,由SO网友:Jerry R. 整理而成
好吧,出于某种原因,它现在起作用了。我没有挂接到“init”,而是使用了“the\\u post”,表单shortcode完成了它的工作。我不再有发布新帖子或不保存数据的问题。此外,没有“无法修改标题信息-标题已发送”错误。
功能
function el_process_form(){
if( $_SERVER[\'REQUEST_METHOD\'] == \'POST\' && !empty( $_POST[\'post_type\'] ) && $_POST[\'post_type\'] == "everlead"){
$name = stripcslashes($_POST["name"]);
$email = stripcslashes($_POST["email"]);
$phone = stripcslashes($_POST["phone"]);
$website = stripcslashes($_POST["website"]);
// Do some minor form validation to make sure there is content
if (trim($name) == "" ) {
echo \'Please go back and enter your name. <br />\';
exit();
}
if (trim($email) == "" ) {
echo \'Please go back and enter a valid email address.<br/>\';
exit();
}
if (trim($phone) == "" ) {
echo \'Please go back and enter a contact number.<br/>\';
exit();
}
if (trim($website) == "" ) {
echo \'Please go back and enter your website url.<br/>\';
exit();
}
global $wpdb;
//Set time
$formtime = date(\'m-d-Y h:i:a\');
$ipaddress = $_SERVER[\'REMOTE_ADDR\'];
//Table data
$data = array(
\'name\' => $name,
\'email\' => $email,
\'phone\' => $phone,
\'website\' => $website,
\'date\' => $formtime,
\'ipaddress\' => $ipaddress
);
//set lead data
$table = $wpdb->prefix . \'el_leads\';
$wpdb->insert( $table, $data, array(\'%s\', \'%s\', \'%s\', \'%s\', \'%s\') );
}
}
我使用“the\\u post”,一切正常
add_action( \'the_post\', \'el_process_form\' );
现在我的短代码
[el_form buttonsize="block"]
在任何页面或帖子上工作并显示表单。最重要的是,它将数据保存到数据库中。
我必须更深入地了解为什么在使用表单快捷码时,“the\\u post”比“init”更有效。