求助:Contact Form 7提交内容未自动生成WordPress文章
修复CF7提交生成WordPress文章的问题
你的代码存在几个关键问题,我给你修正并简化,同时保留了基础的错误防护逻辑:
原代码的问题点
- 表单ID判断逻辑错误:
$contact_form->id(11247)写法不符合CF7的API规范,且未定义$my_form_id变量 - 变量作用域漏洞:若
$submission获取失败,$posted_data会未定义,导致后续代码直接报错终止 - 日期格式不兼容:CF7日期字段默认仅返回
YYYY-MM-DD格式,但wp_insert_post要求完整的YYYY-MM-DD HH:MM:SS格式
修正后的代码
function save_cf7_data_to_post($contact_form) { // 仅处理ID为11247的CF7表单 if (11247 !== $contact_form->id()) { return; } $submission = WPCF7_Submission::get_instance(); if (!$submission) { return; } $posted_data = $submission->get_posted_data(); // 过滤空数据,避免生成无效文章 if (empty($posted_data['text-410']) || empty($posted_data['textarea-420'])) { return; } // 整理文章参数,添加安全过滤 $post_args = array( 'post_type' => 'post', 'post_status' => 'draft', 'post_category' => array(91), // 确保后台存在ID为91的分类 'post_title' => sanitize_text_field($posted_data['text-410']), 'post_content' => wp_kses_post($posted_data['textarea-420']), 'post_date' => !empty($posted_data['date']) ? $posted_data['date'] . ' 00:00:00' : current_time('mysql'), ); // 插入文章,可打开注释调试 $post_id = wp_insert_post($post_args); // 调试用:提交后直接显示结果,调试完成后注释掉 // if (is_wp_error($post_id)) { // wp_die('生成失败:' . $post_id->get_error_message()); // } else { // wp_die('文章已生成,ID:' . $post_id); // } } add_action('wpcf7_before_send_mail', 'save_cf7_data_to_post');
快速排查步骤
- 核对CF7表单字段的
name属性,确保和代码里的text-410、textarea-420、date完全一致 - 确认后台存在ID为91的文章分类(鼠标悬停分类名称,地址栏的
tag_ID即为分类ID) - 若仍无生成,打开代码里的调试注释,提交表单后会直接显示错误原因
内容的提问来源于stack exchange,提问作者Thomas Nielsen
相关产品推荐
相关产品推荐

