联系表格7 get_posted_data无法在钩子wpcf7_before_send_mail中工作

时间:2018-05-15 23:13:44

标签: wordpress contact-form-7

我从stackoverflow借用了这个代码,试图找到一个解决方案。我需要从表单上提交的数据创建一个新帖子。我正在使用过滤器:

  add_filter( 'wpcf7_posted_data', 'save_new_booked_event_data' );

但发现它在每次提交后都被解雇,而不是在验证后。所以我转到了这段代码:

 add_action('wpcf7_before_send_mail','contactform7_before_send_mail',1);function 
    contactform7_before_send_mail( $contact_form ) {       
         if ( !isset($contact_form->posted_data) && class_exists('WPCF7_Submission') ) {
                 $submission = WPCF7_Submission::get_instance();
            if ( $submission ) {
                 $formData = $submission->get_posted_data();   
                 $formField = $formData['_wpcf7'];     
                 update_post_meta(199, 'first_name', $formField);
    }
} else {
    // We can't retrieve the form data
    return $contact_form;
}
   return $contact_form;
}

五小时后:get_posted_data方法始终为NULL。我尝试从不同角度接近它,包括关闭ajax并发布表单。我检查并转储了每个对象,以确保它可以工作,但它总是变为NULL。我在这里错过了什么?请有人吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

受过教育的猜测:

get_posted_data方法首先取决于setup_posted_data解雇,that occurs when the constructor for the WPCF7_Submission class is invoked

也许有多个联系表单,并且您的contactform7_before_send_mail函数已挂钩到其中一个尚未提交的表单,因此数据为null

在这种情况下,如果您将WPCF7_ContactForm的实例传递给WPCF7_Submission::get_instance();来电,则可以覆盖并强制为您的表单填充已过帐的数据。

类似的东西:

$form       = new WPCF7_ContactForm($id_of_your_form);
$submission = WPCF7_Submission::get_instance($form);
顺便说一下!您的代码段似乎来自this wordpress plugin。 (表格发布)如果您需要更可配置的解决方案,或浏览其所在的上下文。