Contact Form 7集成Carquery API后trim字段返回数字ID问题求助
解决方案
步骤1:修改Carquery JS代码
- 完整复制
https://www.carqueryapi.com/js/carquery.0.3.4.js的所有代码,保存到你站点的本地目录(推荐存到当前WordPress主题的/js/目录下),重命名为custom-carquery.0.3.4.js避免和原文件混淆。 - 找到文件中第867行的代码:
options += '<option value="' + trims[i].model_trim + '" '+s+'>' + trim_display + '</option>';
当前问题根因是下拉框的value属性绑定的是trim对应的数字ID,而显示给用户的文本trim_display才是实际的车型版本名称。你之前看到的旧解决方案对应更早版本的Carquery JS,旧版本中trim的ID字段为trim_id,版本迭代后你当前使用的0.3.4版本已将ID字段改为model_trim,因此找不到对应字段。直接将代码修改为:
options += '<option value="' + trim_display + '" '+s+'>' + trim_display + '</option>';
如果后续需要同时提交trim ID和版本名称,可以给表单加一个隐藏字段,用JS同步把trims[i].model_trim的值赋给隐藏字段即可。
步骤2:替换JS引用路径
打开carquery-api.php文件,找到第107行的wp_register_script代码,将原来的远程JS地址替换为你刚才保存的本地自定义JS文件地址,示例代码(如果存在主题/js目录下):
wp_register_script('carquery-api-js', get_stylesheet_directory_uri() . '/js/custom-carquery.0.3.4.js', array('jquery'), '0.3.4', true);
补充末尾的版本号、加载位置参数,可以避免浏览器缓存旧版JS的问题。
可选替代方案
如果不想修改原JS文件,也可以用Contact Form 7的提交前钩子wpcf7_before_send_mail,在邮件发送前通过Carquery API把trim ID转换为对应的版本名称再写入邮件内容,该方案适合不想改动插件核心代码的场景。
验证注意
修改完成后清空站点缓存、浏览器缓存,再提交表单测试即可看到trim字段正常显示版本名称。
内容的提问来源于stack exchange,提问作者karloo
相关产品推荐
相关产品推荐

