带有管道联系表 7 的可选收件人获取国家/地区名称问题
Posted
技术标签:
【中文标题】带有管道联系表 7 的可选收件人获取国家/地区名称问题【英文标题】:Selectable recipient with pipes contact form 7 get country name issue 【发布时间】:2022-01-21 23:02:12 【问题描述】:我在联系表 7 中使用国家下拉菜单。它看起来像这样 [select* country "Canada | team1@website.com,team3@website.com" "Mexico | team2@website.com" "Zimbabwe | team3@website.com"]
,如果我使用它来获取 [_row_country] 的第一个值和 [country] 的第二个值(在管道之后),它工作正常在邮件部分。
但我想将其保存在客户数据库中并尝试以此获取国家/地区名称
$your_country = $form_data['_raw_country'];
$country = implode( ', ', (array) $your_country );
它只返回电子邮件而不返回国家/地区,所以我也试试这个
$your_country = $form_data['country'];
$country = implode( ', ', (array) $your_country );
它返回空白。 这是我的参考代码。
function contactform7_before_send_mail( $contact_form, $abort, $submission )
// set your db details.
$mydb = new wpdb( 'user', 'password', 'database', 'localhost' );
if ( $submission )
$form_data = $submission->get_posted_data();
$your_country = $form_data['_raw_country'];
$country = implode( ', ', (array) $your_country );
$mydb->insert(
'tableName',
array(
'fullname' => sanitize_text_field( $form_data['FullName'] ),
'country' => $country,
'companyname' => sanitize_text_field( $form_data['CompanyName'] ),
),
array( '%s', '%s', '%s' )
);
add_action( 'wpcf7_before_send_mail', 'contactform7_before_send_mail', 10, 3 );
这是参考链接https://contactform7.com/selectable-recipient-with-pipes/
【问题讨论】:
【参考方案1】:要从管道中获取信息,您不能只使用[_raw_field]
,因为它不是以这种方式存储的。获取 Piped 数据的值稍微复杂一些。要获取管道的值,您必须检索表单标签,然后循环遍历每个管道的值。
add_action( 'wpcf7_before_send_mail', 'dd_handle_form_submission', 10, 3 );
function dd_handle_form_submission( $contact_form, $abort, $submission )
if ( $submission )
$form_data = $submission->get_posted_data();
// Get the tags.
$tags = $submission->get_contact_form()->scan_form_tags();
// Get the country field submission.
$country = $submission->get_posted_data( 'country' );
foreach ( $tags as $tag )
if ( 'country' === $tag->name )
// Get the Pipes.
$pipe_array = $tag->pipes->to_array();
foreach ( $pipe_array as $value )
if ( $country[0] === $value[1] )
// $value[0] is Left of Pipe - $value[1] is right of pipe.
$country_name = $value[0];
if ( isset( $country_name ) )
$mydb = new wpdb( 'user', 'password', 'database', 'localhost' );
$mydb->insert(
'tableName',
array(
'fullname' => sanitize_text_field( $form_data['FullName'] ),
'country' => $country_name,
'companyname' => sanitize_text_field( $form_data['CompanyName'] ),
),
array( '%s', '%s', '%s' )
);
特定问题的新答案/解决方案
在您的情况下,管道之后的值不是唯一的。这带来了另一个问题,这使得管道不太好。在这种情况下,我会使用 jQuery 和一个隐藏的表单域。
使联系表格如下所示:
<p>[select* country id:country include_blank "Canada | team1@website.com,team3@website.com" "Mexico | team2@website.com" "Serbia | team2@website.com" "Zimbabwe | team3@website.com"]</p>
<p>[text FullName]</p>
<p>[email your-email]</p>
[hidden hidden_country id:hidden_country]
[submit]
<script>
jQuery(function($)
$('#country').on( 'change', function()
$('#hidden_country').val($(this).val());
);
);
</script>
然后,由于您只是捕获更改时的国家/地区值,您可以轻松将该值推送到您的数据库,并使用您发送到(管道右侧)的电子邮件,就是这样。
add_action( 'wpcf7_before_send_mail', 'dd_handle_form_submission', 10, 3 );
function dd_handle_form_submission( $contact_form, $abort, $submission )
if ( $submission )
$form_data = $submission->get_posted_data();
$country_name = sanitize_text_field( $form_data['hidden_country'] );
if ( ! empty( $country_name ) )
$mydb = new wpdb( 'user', 'password', 'database', 'localhost' );
$mydb->insert(
'tableName',
array(
'fullname' => sanitize_text_field( $form_data['FullName'] ),
'country' => $country_name,
'companyname' => sanitize_text_field( $form_data['CompanyName'] ),
),
array( '%s', '%s', '%s' )
);
【讨论】:
只有在所有国家/地区的电子邮件 ID 不同时才有效。但在我的情况下,某些国家/地区的电子邮件 ID 不同,而对于其他国家/地区,电子邮件 ID 相同,例如 [select* country "Canada | team1@website.com,team3@website.com" "Mexico | team2@website.com" "Serbia | team2 @website.com" "Zimbabwe | team3@website.com"], 如果选择墨西哥则返回塞尔维亚 电子邮件 ID 相同。当然,它会返回数据集中的最后一个。如果记录的值相同,您现在如何选择他们选择的哪一个?这是可以解决的,但这确实是另一个问题。我在这里向您展示的内容 - 回答了如何获取管道值。 我之前也发布过问题。但那个时候运气不好。 ***.com/questions/67699300/… 我在那里也给了你答案。 是的,但当时,问题是一样的。我仍然没有得到我的问题的解决方案以上是关于带有管道联系表 7 的可选收件人获取国家/地区名称问题的主要内容,如果未能解决你的问题,请参考以下文章
如何获取用户提供的国家、地区、城镇和地区名称 area_id 迁移到用户表