在 Contact Form 7 中加载 Ultimate Member 动态电子邮件发送电子邮件

Load Ultimate Member dynamic email in Contact Form 7 send email

我正在使用 Ultimate Member 插件,我需要 CF7 加载 public 成员配置文件中每个用户的电子邮件以供发送。 在这里,我保留了我使用过的代码,但它只适用于我以字符串格式 $dynamic_email = 'mail@mail.com'; 而不是 $dynamic_email = $value; 的电子邮件 如何让以下动态代码为我工作?

function wpcf7_before_send_mail_function( $contact_form, $abort, $submission ) {
        $form_id = $contact_form->id();
        if($form_id == 799 ){
            $valor = get_the_author_meta('user_email', um_profile_id()); // um_profile_id() - Profile ID in the Ultimate Member plugin
            $dynamic_email = $valor;
            $properties = $contact_form->get_properties();
            $properties['mail']['recipient'] = $dynamic_email;
            $contact_form->set_properties($properties);
            return $contact_form;
        }
    }
    add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_function', 10, 3 );

我需要加载 get_the_author_meta('user_email', um_profile_id()) 的值,以便在每个 public 配置文件中上传邮件。

非常感谢您的帮助。

总结一下这个功能如果有效,它设法更改发送电子邮件并发送表单:

function wpcf7_before_send_mail_function( $contact_form, $abort, $submission ) {
        $form_id = $contact_form->id();
        if($form_id == 799 ){
            $dynamic_email = 'mail@mail.com';
            $properties = $contact_form->get_properties();
            $properties['mail']['recipient'] = $dynamic_email;
            $contact_form->set_properties($properties);
            return $contact_form;
        }
    }
    add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_function', 10, 3 );

我需要的另一台机器无法正常工作,也无法发送显示错误“尝试发送您的消息时发生错误。请稍后重试。”的邮件。我不明白或不知道如果我只做一个小的改变它就不起作用的原因,它也 returns 一封电子邮件:

function wpcf7_before_send_mail_function( $contact_form, $abort, $submission ) {
        $form_id = $contact_form->id();
        if($form_id == 799 ){
            $valor = get_the_author_meta('user_email', um_profile_id()); // um_profile_id() - Profile ID in the Ultimate Member plugin
            $dynamic_email = $valor;
            $properties = $contact_form->get_properties();
            $properties['mail']['recipient'] = $dynamic_email;
            $contact_form->set_properties($properties);
            return $contact_form;
        }
    }
    add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_function', 10, 3 );

感谢您的帮助。

要将 um_profile_id() 传递给表单数据,您需要将其添加到表单中(如我自己和@cbroe 的评论所述)。为此,您需要使用 javascript 将其传递给隐藏的表单字段,或者简单地创建一个自定义表单标签。下面使用自定义表单标签。

[um_profile_id] 添加到您的表单中,下面的功能将起作用。

此外,由于 wpcf7_before_send_mail 是一个动作挂钩,您不必 return 任何东西,$contact_form 对象通过引用传递并在您设置 属性.

function wpcf7_before_send_mail_function( $contact_form, $abort, $submission ) {
    if ( $submission && 799 === $contact_form->id() ) {
        $posted_data = $submission->get_posted_data();
        if ( isset( $posted_data['um-profile-id'] ) ) {
            $user                            = get_user_by( 'id', absint( $posted_data['um-profile-id'] ) );
            $properties                      = $contact_form->get_properties();
            $properties['mail']['recipient'] = $user->user_email;
            $contact_form->set_properties( $properties );
        }
    }
}
add_action( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_function', 10, 3 );


add_action( 'wpcf7_init', 'um_profile_id_form_tag' );
function um_profile_id_form_tag() {
    wpcf7_add_form_tag( 'um_profile_id', 'cf7_get_um_profile_id' );
}

function cf7_get_um_profile_id() {
    $output = sprintf( '<input type="hidden" name="um-profile-id" value="%s"/>', um_profile_id() );
    return $output;
}

此方法已经过测试,有效。