【问题标题】:Dynamic email in CF7 (using custom fields)CF7 中的动态电子邮件(使用自定义字段)
【发布时间】:2016-10-05 22:48:51
【问题描述】:

我正在尝试通过将收件人字符串替换为自定义帖子字段值来动态更新 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,我需要该值

【问题讨论】:

    标签: php contact-form-7


    【解决方案1】:

    get_the_id() 不会返回正确的 ID,因为 Contact form 7 使用 Ajax 来执行发送。

    您可以从提交单元标签中获取帖子 ID。单元标签是一个隐藏的表单字段,它与表单一起发布,看起来很神秘,但它存储了有关帖子的信息。一个示例单元标签类似于wpcf7-f235-p27-o1。使用正则表达式,我们可以从单元标签中获取帖子 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

    【讨论】:

    • 谢谢,这是一些我不知道的非常有用的信息。联系表格现在似乎正在发送,但是电子邮件没有通过,所以我不确定这是否是我调用自定义字段的方式有误?我是否应该调用该字段中的第一封电子邮件?
    • 尝试在您的 str_replace 通话中将 $dynamic_email["dynamic_email"] 更改为 $dynamic_email
    • 是的,我试过了,但无济于事。我也尝试更改get_post_meta_values( $post_id, 'dynamic_email', true ),但它似乎没有发送电子邮件——不用担心。我会继续挖掘。
    • 在您检索到帖子元值后添加file_put_contents( get_template_directory() . '/debug.log', print_r( $dynamic_email, true ), FILE_APPEND );。然后查看你的模板目录下的debug.log,看看$dynamic_email的值是什么
    • 不确定我是否做得对,但它又回到空白
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    相关资源
    最近更新 更多