表单快捷代码未将数据保存到WP数据库

时间:2013-09-18 作者:Jerry R.

我正在开发一个插件,在插件激活时创建一个自定义表。该插件允许用户添加一个表单快捷码来收集潜在客户的数据。

我已经到了这样的地步:要么保存数据,但无法创建新帖子(在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\' );
上面的代码允许我创建一个新帖子(如前一段所述),但数据不会保存。

1 个回复
最合适的回答,由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”更有效。

结束

相关推荐

Wrap php in shortcode

我正在使用一个插件,该插件将根据用户位置显示内容,我正在尝试将其添加到facebook小部件代码中。该插件使用了一个短代码来包装将要显示的内容,下面是我到目前为止的内容。我知道我做错了什么,如果你能给我指出正确的方向,我将不胜感激。if (($user_id) and ($app_id) and ($secret_code)){ $user_data = get_option(\'wt_recent_fb_posts_user\'); echo do_shortc