[英]Change CF7 Form values dynamically
我一直在尝试在不使用 Contact Form 7 Dynamic Text Extension 的情况下动态更改 CF7 表单字段。 我看过大量关于如何获取发布数据的文章,而不是关于如何覆盖现有值的文章。 我的目标是动态更改文件附件并添加与每个帖子关联的其他元数据。 这能做到吗? 谢谢!
这是我到目前为止所拥有的:
function wpcf7_custom_before_send(&$cf7) {
if ( $cf7->id == 4 ) {
$submission = WPCF7_Submission::get_instance();
if ( $submission ) {
$data =& $submission->get_posted_data();
// how do I overwrite posted data?
}
}
}
add_action("wpcf7_before_send_mail", "wpcf7_custom_before_send");
您可以使用我的代码来执行此操作。 对您的代码的一些解释:
1) 由于 id $cf7->id
属性不再可用。 使用 id() 方法代替$cf7->id()
。
2) 不需要使用&
回调$cf7
和$submission
。 用于此return
。
add_action("wpcf7_before_send_mail", "wpcf7_do_something");
function wpcf7_do_something($WPCF7_ContactForm)
{
if (224 == $WPCF7_ContactForm->id()) {
//Get current form
$wpcf7 = WPCF7_ContactForm::get_current();
// get current SUBMISSION instance
$submission = WPCF7_Submission::get_instance();
// Ok go forward
if ($submission) {
// get submission data
$data = $submission->get_posted_data();
// nothing's here... do nothing...
if (empty($data))
return;
// extract posted data for example to get name and change it
$name = isset($data['your-name']) ? $data['your-name'] : "";
// do some replacements in the cf7 email body
$mail = $wpcf7->prop('mail');
// Find/replace the "[your-name]" tag as defined in your CF7 email body
// and add changes name
$mail['body'] = str_replace('[your-name]', $name . '-tester', $mail['body']);
// Save the email body
$wpcf7->set_properties(array(
"mail" => $mail
));
// return current cf7 instance
return $wpcf7;
}
}
}
就是这样,我们更改了一些标签,并使用修改后的标签发送电子邮件;-)
由于我需要根据 ACF 字段修改表单接收器,这里有一个基于 @Brotheryura 代码的复制和粘贴解决方案。
它允许您动态修改电子邮件的收件人,而无需在前端有任何隐藏字段。 Simpy 把它放在你的模板 functions.php 中,并用你自己的函数或代码替换$recipient = ...
部分以获得新的接收器。
add_action("wpcf7_before_send_mail", "wpcf7_change_recipient");
function wpcf7_change_recipient($WPCF7_ContactForm)
{
$wpcf7 = WPCF7_ContactForm::get_current();
$submission = WPCF7_Submission::get_instance();
//some little magic to get the referers ID
$recipient = get_field('mail', url_to_postid(wp_get_referer()));
if (!empty($recipient))
{
if ($submission)
{
$data = $submission->get_posted_data();
// nothing's here... do nothing...
if (empty($data))
return;
// do some replacements in the cf7 email body
$mail = $wpcf7->prop('mail');
$mail['recipient'] = $recipient;
// Save the email body
$wpcf7->set_properties(array(
"mail" => $mail
));
// return current cf7 instance
return $wpcf7;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.