联系表 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;
}

这已经过测试并且适合我。