我从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。我在这里错过了什么?请有人吗?
谢谢!
答案 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。 (表格发布)如果您需要更可配置的解决方案,或浏览其所在的上下文。