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