联系表格 7,将所选选项(下拉菜单)保存到数据库
Contact form 7, save selected option (dropdown menu) to database
我正在尝试将我的联系表 7 中提交的内容保存到我的数据库中。我找到了一些功能(不知道作者)这样做。它可以工作,但不会将从下拉菜单中选择的选项保存到数据库中。我不知道我错过了什么。我试过这个:
add_action("wpcf7_submit", "SE_379325_forward_cf7", 10, 2);
function SE_379325_forward_cf7($form, $result) {
if( !class_exists('WPCF7_Submission') )
return;
$submission = WPCF7_Submission::get_instance();
if ($result["status"] == "mail_sent") { // proceed only if email has been sent
$posted_data = $submission->get_posted_data();
save_posted_data($posted_data);
}
};
// your insert function:
function save_posted_data($posted_data){
$form_id = $posted_data["_wpcf7"]; // this is the post->ID of the submitted form so if you have more than one you can decide whether or not to save this form fields
if($form_id == 403)
return;
global $wpdb;
$wpdb->insert(
$wpdb->prefix.'tabletest',
array(
'lastname'=>$posted_data['lastName'],
'name'=>$posted_data['firstName'],
'email'=>$posted_data['email'],
'phone'=>$posted_data['tel-3'],
'subject'=>$posted_data['menu-338'],
'role'=>$posted_data['menu-761'],
'message'=>$posted_data['your-message'],
'thedate'=>$posted_data['date-288']
),
array('%s')
);
}
我无法保存的字段是 'subject' 和 'role'。它们在我的 table 列中是空的。
This is my form from Contact Form 7
如有任何帮助,我将不胜感激。
两个潜在的问题。
- 表单 ID 可能无法按照您尝试获取的方式显示。您可以通过在第一个
submit
函数中获取 $contact_form->id
将其传递给您的函数。
- 从几个版本以前的 CF7 开始,下拉列表中的数据(始终)作为数组传递。
我也添加了清理,您可以根据需要进行更改。 CF7 默认情况下不会清理数据,因为它只是输入 in/input,并没有存储在任何地方。
add_action( 'wpcf7_submit', 'SE_379325_forward_cf7', 10, 2 );
function SE_379325_forward_cf7( $form, $result ) {
if ( ! class_exists( 'WPCF7_Submission' ) ) {
return;
}
$submission = WPCF7_Submission::get_instance();
if ( 'mail_sent' === $result['status'] ) { // proceed only if email has been sent.
$posted_data = $submission->get_posted_data();
save_posted_data( $posted_data, $form->id );
}
}
// your insert function.
function save_posted_data( $posted_data, $form_id ) {
if ( 403 !== $form_id ) {
global $wpdb;
$wpdb->insert(
$wpdb->prefix . 'tabletest',
array(
'lastname' => sanitize_text_field( wp_unslash( $posted_data['lastName'] ) ),
'name' => sanitize_text_field( wp_unslash( $posted_data['firstName'] ) ),
'email' => sanitize_text_field( wp_unslash( $posted_data['email'] ) ),
'phone' => sanitize_email( wp_unslash( $posted_data['tel-3'] ) ),
'subject' => sanitize_text_field( wp_unslash( $posted_data['menu-338'][0] ) ),
'role' => sanitize_text_field( wp_unslash( $posted_data['menu-761'][0] ) ),
'message' => sanitize_textarea_field( wp_unslash( $posted_data['your-message'] ) ),
'thedate' => sanitize_text_field( wp_unslash( $posted_data['date-288'] ) ),
),
array( '%s' )
);
}
}
我正在尝试将我的联系表 7 中提交的内容保存到我的数据库中。我找到了一些功能(不知道作者)这样做。它可以工作,但不会将从下拉菜单中选择的选项保存到数据库中。我不知道我错过了什么。我试过这个:
add_action("wpcf7_submit", "SE_379325_forward_cf7", 10, 2);
function SE_379325_forward_cf7($form, $result) {
if( !class_exists('WPCF7_Submission') )
return;
$submission = WPCF7_Submission::get_instance();
if ($result["status"] == "mail_sent") { // proceed only if email has been sent
$posted_data = $submission->get_posted_data();
save_posted_data($posted_data);
}
};
// your insert function:
function save_posted_data($posted_data){
$form_id = $posted_data["_wpcf7"]; // this is the post->ID of the submitted form so if you have more than one you can decide whether or not to save this form fields
if($form_id == 403)
return;
global $wpdb;
$wpdb->insert(
$wpdb->prefix.'tabletest',
array(
'lastname'=>$posted_data['lastName'],
'name'=>$posted_data['firstName'],
'email'=>$posted_data['email'],
'phone'=>$posted_data['tel-3'],
'subject'=>$posted_data['menu-338'],
'role'=>$posted_data['menu-761'],
'message'=>$posted_data['your-message'],
'thedate'=>$posted_data['date-288']
),
array('%s')
);
}
我无法保存的字段是 'subject' 和 'role'。它们在我的 table 列中是空的。
This is my form from Contact Form 7
如有任何帮助,我将不胜感激。
两个潜在的问题。
- 表单 ID 可能无法按照您尝试获取的方式显示。您可以通过在第一个
submit
函数中获取$contact_form->id
将其传递给您的函数。 - 从几个版本以前的 CF7 开始,下拉列表中的数据(始终)作为数组传递。
我也添加了清理,您可以根据需要进行更改。 CF7 默认情况下不会清理数据,因为它只是输入 in/input,并没有存储在任何地方。
add_action( 'wpcf7_submit', 'SE_379325_forward_cf7', 10, 2 );
function SE_379325_forward_cf7( $form, $result ) {
if ( ! class_exists( 'WPCF7_Submission' ) ) {
return;
}
$submission = WPCF7_Submission::get_instance();
if ( 'mail_sent' === $result['status'] ) { // proceed only if email has been sent.
$posted_data = $submission->get_posted_data();
save_posted_data( $posted_data, $form->id );
}
}
// your insert function.
function save_posted_data( $posted_data, $form_id ) {
if ( 403 !== $form_id ) {
global $wpdb;
$wpdb->insert(
$wpdb->prefix . 'tabletest',
array(
'lastname' => sanitize_text_field( wp_unslash( $posted_data['lastName'] ) ),
'name' => sanitize_text_field( wp_unslash( $posted_data['firstName'] ) ),
'email' => sanitize_text_field( wp_unslash( $posted_data['email'] ) ),
'phone' => sanitize_email( wp_unslash( $posted_data['tel-3'] ) ),
'subject' => sanitize_text_field( wp_unslash( $posted_data['menu-338'][0] ) ),
'role' => sanitize_text_field( wp_unslash( $posted_data['menu-761'][0] ) ),
'message' => sanitize_textarea_field( wp_unslash( $posted_data['your-message'] ) ),
'thedate' => sanitize_text_field( wp_unslash( $posted_data['date-288'] ) ),
),
array( '%s' )
);
}
}