CF7中的动态电子邮件(使用自定义字段)

时间:2016-10-05 14:14:45

标签: php contact-form-7

我正在尝试通过用自定义帖子字段值替换收件人字符串来动态更新CF7到字段,但我无法弄清楚如何分配值,它肯定会替换字符串,因为我收到错误,如果我更改它发送的电子邮件。所以它告诉我问题是当我想要获得价值时。

<?php
function wpcf7_dynamic_email_field($args) {
  $dynamic_email = get_post_meta(get_the_ID(), 'dynamic_email', true);
  if(!empty($args['recipient'])) {
    $args['recipient'] = str_replace('emailtobereplaced@email.com', $dynamic_email["dynamic_email"], $args['recipient']);
    return $args;
  }
  return false;
}
add_filter('wpcf7_mail_components', 'wpcf7_dynamic_email_field');
?>

有人能指出我在正确的方向吗?我的自定义字段称为dynamic_email,我需要值

1 个答案:

答案 0 :(得分:2)

get_the_id()无法返回正确的ID,因为Contact表单7使用Ajax来执行发送。

您可以从提交单位标记中获取帖子ID。单位标签是一个隐藏的表单字段,随表单一起发布,看起来很神秘,但它存储有关帖子的信息。示例单元标记看起来像wpcf7-f235-p27-o1。使用正则表达式,我们可以从单元标记中获取post id。

function wpcf7_dynamic_email_field( $args ) {

    $dynamic_email = '';
    $submission = WPCF7_Submission::get_instance();
    $unit_tag = $submission->get_meta( 'unit_tag' );

    // get the post ID from the unit tag
    if ( $unit_tag && preg_match( '/^wpcf7-f(\d+)-p(\d+)-o(\d+)$/', $unit_tag, $matches ) ) {
        $post_id = absint( $matches[2] );
        $dynamic_email = get_post_meta( $post_id, 'dynamic_email', true );
    }

    if ( $dynamic_email ) {
        $args['recipient'] = str_replace('emailtobereplaced@email.com', $dynamic_email["dynamic_email"], $args['recipient']);
    }

    return $args;
}

add_filter( 'wpcf7_mail_components', 'wpcf7_dynamic_email_field' );

由于这是一个过滤器,而不是一个操作,因此您总是希望返回传递给回调的第一个参数$args