WordPress中无需JS修改Contact Form 7成功消息并展示自定义优惠码
Contact Form 7 自定义提交成功消息解决方案
你之前尝试的钩子不符合使用场景:wpcf7_messages是用于配置CF7全局默认消息列表的过滤器,wpcf7_before_send_mail、wpcf7_mail_sent是动作钩子,仅用于触发邮件发送前后的自定义逻辑,不负责控制返回给前端的响应消息内容。
推荐两种可直接生效的方案:
方案1:使用wpcf7_display_message过滤器(最简单)
这个过滤器专门用于修改CF7各类状态下的提示消息,代码示例如下:
add_filter( 'wpcf7_display_message', 'custom_cf7_success_coupon_message', 10, 2 ); function custom_cf7_success_coupon_message( $message, $status ) { // 仅匹配表单提交成功的状态 if ( $status === 'mail_sent_ok' ) { // 替换为你自己存储优惠码的cookie键名 $coupon = isset( $_COOKIE['your_coupon_cookie_key'] ) ? sanitize_text_field( $_COOKIE['your_coupon_cookie_key'] ) : ''; if ( !empty($coupon) ) { $message = "提交成功!您的专属优惠码为:{$coupon},可在下单时直接抵扣使用。"; // 可选:展示后删除cookie避免重复显示 setcookie( 'your_coupon_cookie_key', '', time() - 7200, COOKIEPATH, COOKIE_DOMAIN ); } } return $message; }
方案2:使用wpcf7_ajax_json_echo过滤器(灵活性更高)
如果需要同时修改AJAX返回的其他参数,可以使用这个过滤器直接修改响应体:
add_filter( 'wpcf7_ajax_json_echo', 'custom_cf7_ajax_coupon_response', 10, 2 ); function custom_cf7_ajax_coupon_response( $response, $result ) { if ( isset($result['status']) && $result['status'] === 'mail_sent' ) { $coupon = isset( $_COOKIE['your_coupon_cookie_key'] ) ? sanitize_text_field( $_COOKIE['your_coupon_cookie_key'] ) : ''; if ( !empty($coupon) ) { $response['message'] = "提交成功!您的专属优惠码为:{$coupon},可在下单时直接抵扣使用。"; // 可选:展示后删除cookie避免重复显示 setcookie( 'your_coupon_cookie_key', '', time() - 7200, COOKIEPATH, COOKIE_DOMAIN ); } } return $response; }
注意事项
- 请将代码放在当前主题的
functions.php文件,或者自定义功能插件的代码文件中 - 优惠码输出前需要做 sanitize 处理,避免XSS安全风险
- 不要在
wpcf7_mail_sent等动作钩子中直接输出内容,会破坏AJAX返回的JSON结构导致前端报错 - 你现有的
dbo_generate_coupon逻辑不需要修改,只要保证优惠码已经存入cookie即可,两个方案的钩子执行顺序都晚于wpcf7_mail_sent,可以正常读取到生成的优惠码
内容的提问来源于stack exchange,提问作者DbO-NZ
相关产品推荐
相关产品推荐

