CMB2插件file字段前端上传文件后更新表单丢失问题求助
解决WP Job Board Pro文件上传更新后消失的问题
1. 确保表单包含文件上传必要属性
WP Job Board Pro的文件字段提交时,必须让表单携带enctype="multipart/form-data"属性,否则服务器无法解析上传的文件。
- 如果是自定义表单,直接在form标签中添加:
<form method="post" enctype="multipart/form-data"> <!-- 表单内容 --> </form>
- 如果用插件自带表单,通过钩子强制添加属性:
add_filter('wp_job_board_pro_job_submit_form_args', function($args) { $args['form_attrs']['enctype'] = 'multipart/form-data'; return $args; });
2. 处理文件元数据的保存逻辑
插件默认在更新表单时,若未重新上传文件会清空旧文件记录,需要手动保留已上传文件:
将以下代码添加到主题functions.php或自定义插件中(替换your_field_prefix_为你的字段前缀):
add_action('wp_job_board_pro_after_save_job', function($job_id) { $prefix = 'your_field_prefix_'; $field_id = $prefix . 'upload_files'; // 获取已保存的旧文件 $old_files = get_post_meta($job_id, $field_id, true); $old_files = is_array($old_files) ? $old_files : []; // 获取新上传的文件 $new_files = isset($_FILES[$field_id]) ? $_FILES[$field_id] : []; // 合并新旧文件(有新文件则追加,无新文件则保留旧文件) if (!empty($new_files['name'][0])) { $uploaded_files = wp_job_board_pro_upload_files($field_id, $new_files); if (!empty($uploaded_files)) { update_post_meta($job_id, $field_id, array_merge($old_files, $uploaded_files)); } } elseif (!empty($old_files)) { update_post_meta($job_id, $field_id, $old_files); } }, 10, 1);
3. 修复编辑页面的文件显示
确保编辑表单时已上传的文件能正常展示,添加钩子强制读取保存的元数据:
add_filter('wp_job_board_pro_get_field_value', function($value, $field, $post_id) { $prefix = 'your_field_prefix_'; if ($field['id'] === $prefix . 'upload_files') { $saved_files = get_post_meta($post_id, $field['id'], true); return is_array($saved_files) ? $saved_files : []; } return $value; }, 10, 3);
4. 验证服务器环境配置
- 检查
wp-content/uploads目录权限是否为755/775,确保服务器有写入权限 - 确认插件设置中的文件上传路径配置正确,未限制文件类型或大小(与你的字段配置匹配)
内容的提问来源于stack exchange,提问作者Bilal Mughal
相关产品推荐
相关产品推荐

