萨龙网络使用的 Youji 原创企业主题注册登录都是使用 WooCommerce 商城插件自带的表单,使用简单方便。最近苦于国外机器人注册多,且没有更好的 WooCommerce 登录注册验证码插件,谷歌后找到了完美的解决方法:使用 WooCommerce 的钩子:woocommerce_register_form和woocommerce_register_post。
一、自定义字段增加与验证方式
1、向注册表单中添加一个字段
woocommerce_register_form可以向注册表单中添加字段,使用较为简单,代码为:
// 定义 woocommerce_register_form 回调
function action_woocommerce_register_form() {
// 需要增加的字段代码
};
// 添加钩子
add_action( 'woocommerce_register_form', 'action_woocommerce_register_form', 10, 0 );
2、验证字段
woocommerce_register_post用于验证所增加字段,代码为:
// 定义 woocommerce_register_post 回调
function action_woocommerce_register_post( $username, $email, $errors ) {
// 验证代码
};
// 添加钩子
add_action( 'woocommerce_register_post', 'action_woocommerce_register_post', 10, 3 );
二、实例演示
1、新增一个本站名称的字段
/* 注册表单增加本站名称 */
function salong_add_woo_register_form() {
echo '<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wid">';
echo '<i class="icon-wordpress"></i>';
echo '<input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="blogname" id="blogname" value="'.$_POST['blogname'].'" placeholder="'.sprintf(__( '请输入本站名称:%s', 'salong' ),get_option('blogname')).'" required="required" />';
echo '</p>';
}
add_action( 'woocommerce_register_form', 'salong_add_woo_register_form' );
2、验证本站名称是否正确
/*本站名称验证*/
function salong_add_woo_register_form_validate( $username, $email, $validation_errors ) {
if ( $_POST['blogname'] != get_option('blogname') || empty( $_POST['blogname'] ) ) {
$validation_errors->add( 'billing_first_name_error', __( '本地名称输入不正确!', 'salong' ));
}
return $validation_errors;
}
add_action( 'woocommerce_register_post', 'salong_add_woo_register_form_validate', 10, 3 );
查看下 WooCommerce 注册表单将增加了一个新的字段,提交并验证,效果如图:
通过这个实例也可以增加其它的字段,如果需要一开始用户在注册时都填写好地址,可直接将 WooCommerce 结算表单中的字段直接增加到注册表单字段中。