联系表 7 - 字段替换后更改电子邮件内容
Contact Form 7 - Change email content after field replacement
我正在尝试将发送给管理员的电子邮件中的文本全部大写。我的所有大写字母都可以使用,但占位符([名字]、[姓氏]、[电子邮件地址] 等)没有被替换为值。我不知道如何在替换占位符后在电子邮件正文上使用 strtoupper() 函数。
这是我当前的代码:
add_action("wpcf7_before_send_mail", "wpcf7_all_caps_email");
function wpcf7_all_caps_email($WPCF7_ContactForm)
{
//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;
}
$mail = $wpcf7->prop('mail');
$mail['body'] = strtoupper($mail['body']);
// Save the email body
$wpcf7->set_properties(array(
"mail" => $mail
));
// return current cf7 instance
return $wpcf7;
}
}
收到的邮件是这样的:
FROM:
[YOUR-NAME]
EMAIL:
[YOUR-EMAIL]
PHONE:
[YOUR-PHONE]
COMPANY: (EMPTY IF NOT ENTERED)
[COMPANY-NAME]
EVENT DATE:
[_FORMAT_EVENT-DATE "F JS Y"]
EVENT LOCATION INFORMATION:
[EVENT-ADDRESS]
[EVENT-CITY]
VENUE:
[VENUE-NAME]
NUMBER OF GUESTS:
[NUMBER-OF-GUESTS]
DELIVERY REQUESTED?
[DELIVERY]
MESSAGE:
[YOUR-MESSAGE]
REQUESTED ITEMS:
[YITH-REQUEST-A-QUOTE-LIST]
要将电子邮件中的所有文本转换为大写,您必须在字符串替换完成后执行此操作。在这种情况下,您将不得不使用过滤器 wpcf7_mail_components
,它在字符串替换之后应用,但在电子邮件实际发送之前应用。
此过滤器传递数组中的邮件组件。然后您想使用 DOMDocument
来解析 HTML 并使所有文本大写。
在这种情况下,您可以使用标准大写或小写形式的 cf7 form tags
格式,例如 [text your-field]
add_filter( 'wpcf7_mail_components', 'dd_mail_componentns', 10, 1 );
function dd_mail_componentns( $components ) {
$dom = new DOMDocument();
$dom->loadHTML( $components['body'] );
$xPath = new DOMXPath( $dom );
foreach ( $xPath->query( '/html/body//text()' ) as $text ) {
$text->data = strtoupper( $text->data );
}
$components['body'] = $dom->saveXML( $dom->documentElement );
return $components;
}
这已经过测试并且适合我。
我正在尝试将发送给管理员的电子邮件中的文本全部大写。我的所有大写字母都可以使用,但占位符([名字]、[姓氏]、[电子邮件地址] 等)没有被替换为值。我不知道如何在替换占位符后在电子邮件正文上使用 strtoupper() 函数。
这是我当前的代码:
add_action("wpcf7_before_send_mail", "wpcf7_all_caps_email");
function wpcf7_all_caps_email($WPCF7_ContactForm)
{
//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;
}
$mail = $wpcf7->prop('mail');
$mail['body'] = strtoupper($mail['body']);
// Save the email body
$wpcf7->set_properties(array(
"mail" => $mail
));
// return current cf7 instance
return $wpcf7;
}
}
收到的邮件是这样的:
FROM:
[YOUR-NAME]
EMAIL:
[YOUR-EMAIL]
PHONE:
[YOUR-PHONE]
COMPANY: (EMPTY IF NOT ENTERED)
[COMPANY-NAME]
EVENT DATE:
[_FORMAT_EVENT-DATE "F JS Y"]
EVENT LOCATION INFORMATION:
[EVENT-ADDRESS]
[EVENT-CITY]
VENUE:
[VENUE-NAME]
NUMBER OF GUESTS:
[NUMBER-OF-GUESTS]
DELIVERY REQUESTED?
[DELIVERY]
MESSAGE:
[YOUR-MESSAGE]
REQUESTED ITEMS:
[YITH-REQUEST-A-QUOTE-LIST]
要将电子邮件中的所有文本转换为大写,您必须在字符串替换完成后执行此操作。在这种情况下,您将不得不使用过滤器 wpcf7_mail_components
,它在字符串替换之后应用,但在电子邮件实际发送之前应用。
此过滤器传递数组中的邮件组件。然后您想使用 DOMDocument
来解析 HTML 并使所有文本大写。
在这种情况下,您可以使用标准大写或小写形式的 cf7 form tags
格式,例如 [text your-field]
add_filter( 'wpcf7_mail_components', 'dd_mail_componentns', 10, 1 );
function dd_mail_componentns( $components ) {
$dom = new DOMDocument();
$dom->loadHTML( $components['body'] );
$xPath = new DOMXPath( $dom );
foreach ( $xPath->query( '/html/body//text()' ) as $text ) {
$text->data = strtoupper( $text->data );
}
$components['body'] = $dom->saveXML( $dom->documentElement );
return $components;
}
这已经过测试并且适合我。