在数据库中保存 wordpress 联系表 7 提交

Posted

技术标签:

【中文标题】在数据库中保存 wordpress 联系表 7 提交【英文标题】:Saving wordpress contact form 7 submissions on the database 【发布时间】:2016-04-20 01:15:04 【问题描述】:

我正在尝试将 Contact Form 7 Submissions 保存在数据库中。 目前我正在使用 CFDB 插件将它们保存在数据库中,但它保存在多行中。

插件为每个条目创建多行。我想制作联系表格 7(没有外部插件来保存数据库上的信息)以使每个联系表格一行,其中列是联系表格的字段名称。

现在我正在使用数据透视 SQL 来显示它们,但我需要直接保存它们(我联系了插件的作者寻求帮助,我正在等待回复)

SELECT
DATE_FORMAT(FROM_UNIXTIME(submit_time), '%b %e, %Y  %l:%i %p') AS Submitted,
MAX(IF(field_name='Name', field_value, NULL )) AS 'Name',
MAX(IF(field_name='CardNum', field_value, NULL )) AS 'CardNum',
MAX(IF(field_name='Exp', field_value, NULL )) AS 'Exp',
MAX(IF(field_name='Amount', field_value, NULL )) AS 'Amount'
FROM wp_cf7dbplugin_submits
WHERE
form_name = 'Purchases'
GROUP BY submit_time
ORDER BY submit_time DESC

于是我在谷歌上搜索并找到了一个 tut。

首先我创建了一个表来存储数据库中的数据:

CREATE TABLE `wp_tps_forms` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `form` varchar(100) NOT NULL DEFAULT '',
  `data` text NOT NULL,
  `date` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

然后我在当前的 functions.php 文件上添加了一个操作:

add_action('wpcf7_before_send_mail', 'save_form' );

function save_form( $wpcf7 ) 
   global $wpdb;

   /*
    Note: since version 3.9 Contact Form 7 has removed $wpcf7->posted_data
    and now we use an API to get the posted data.
   */

   $submission = WPCF7_Submission::get_instance();

   if ( $submission ) 

       $submited = array();
       $submited['title'] = $wpcf7->title();
       $submited['posted_data'] = $submission->get_posted_data();

    

     $data = array(
        'name'  => $submited['posted_data']['name'],
        'email' => $submited['posted_data']['email']
         );

     $wpdb->insert( $wpdb->prefix . 'tps_forms', 
            array( 
                          'form'  => $submited['title'], 
               'data' => serialize( $data ),
               'date' => date('Y-m-d H:i:s')
            )
        );

但是这段代码将所有表单的数据插入到单个列中,例如,我如何将变量分成列? (例如姓名、姓氏、地址等)

提前感谢大家!!!

【问题讨论】:

【参考方案1】:

现在这是一个旧项目,它帮助我解决了在不使用 CFDB 的情况下集成来自联系表 7 的数据的问题。

我不知道这是否是您想要做的,但您可以将字段添加到您的表中,然后添加分解的变量,就像这样:

$wpdb->insert( $wpdb->prefix . 'tps_forms', 
    array( 
        'form'  => $submited['title'], 
        'name' => $data['name'],
        'email' => $data['email'],
        'message' => $data['message'],
        'date' => date('Y-m-d H:i:s')
    )
);

谢谢!

【讨论】:

以上是关于在数据库中保存 wordpress 联系表 7 提交的主要内容,如果未能解决你的问题,请参考以下文章

WordPress 日期选择器未出现在联系表 7 中

联系表 7 中的占位符 - Wordpress

Wordpress 联系表 7 显示禁用星期几

想恢复数据到联系表格7,wordpress

Wordpress 联系表 7:我可以发送 2 封不同的电子邮件吗?

清除联系表 7 (Wordpress) 中的字段