如何通过URL参数预填充Woocommerce重置密码页面邮箱字段
WooCommerce重置密码页面预填充邮箱代码修正
你当前的代码存在两个核心问题,导致无法在重置密码页面实现邮箱预填充:
- 过滤器使用错误:你用了
woocommerce_login_form,这个钩子是针对登录页面表单的,而重置密码(找回密码)页面的表单对应的是woocommerce_lost_password_fields钩子。 - 冗余的Session操作:链接里已经直接带了
email参数,完全不需要通过Session中转,反而会增加不必要的复杂度。
以下是修正后的代码,直接从URL参数读取邮箱并预填充到重置密码表单,同时增加邮箱格式验证:
add_filter( 'woocommerce_lost_password_fields', 'prefill_lost_password_email' ); function prefill_lost_password_email( $fields ) { // 检查URL中是否存在email参数,且格式合法 if ( isset( $_GET['email'] ) && is_email( $_GET['email'] ) ) { $email = esc_attr( $_GET['email'] ); // 设置邮箱字段的默认值 $fields['user_login']['default'] = $email; } return $fields; }
代码说明:
- 直接监听
woocommerce_lost_password_fields钩子,精准针对重置密码页面的表单字段 - 使用
is_email()验证参数是否为合法邮箱格式,避免无效值注入 - 用
esc_attr()对邮箱参数做转义处理,确保安全 - 去掉了Session相关代码,逻辑更简洁高效
另外,你原来的template_redirect钩子代码可以直接删除,因为已经不需要通过Session传递数据了。
内容的提问来源于stack exchange,提问作者Blue Li
相关产品推荐
相关产品推荐

