萨龙网络使用的 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 注册表单添加本站名称为字段的验证方式](https:///pic.salongweb.com/2019/01/woocommerce-custom-field.jpg)

通过这个实例也可以增加其它的字段，如果需要一开始用户在注册时都填写好地址，可直接将 WooCommerce 结算表单中的字段直接增加到注册表单字段中。