除非通过结帐注册表单创建帐户,否则如何在 WooCommerce 注册期间更改默认用户角色
How can I change the default user role during registration in WooCommerce unless the account is created via checkout registration form
我想为在我的网站上注册的客户分配自定义用户角色,除非注册是通过 WooCommerce 结帐表格完成的。
我已经尝试了几种方法,但没有任何方法只针对登录页面上的注册表单。我已经设置了一个自定义用户角色,名为“registered_user”。
此代码有效,但同时针对登录页面上的注册表单和用户通过结帐注册时的表单。
add_filter( 'woocommerce_new_customer_data', 'assign_custom_role' );
function assign_custom_role( $args ) {
$args['role'] = 'registered_user';
return $args;
}
它还增加了一个额外的角色,所以现在用户同时拥有“客户”和“registered_user”角色。
我也尝试过向 WooCommerce form_login.php 添加一个隐藏的表单字段 <input type="hidden" name="front_end_reg_form">
试图以以下方式定位表单:
function add_user_role_frontend_reg( $user_id ) {
if($_POST['front_end_reg_form'] == 'front_end_reg_form')
{
$user = new WP_User( $user_id );
$user->remove_role( 'customer' );
$user->add_role( 'registered_user' );
}
}
add_action('user_register', 'add_user_role_frontend_reg', 10, 1);
上面的代码没有做任何事情。如果我将挂钩更改为 add_filter( 'woocommerce_new_customer_data', 'add_user_role_frontend_reg' );
,我会收到错误消息:无法创建具有空登录名的用户。
所以我卡住了。我做错了什么,我该如何纠正?
这实际上可以很容易地通过使用is_checkout()
条件标签来完成,如果没有,调整用户角色
所以你得到:
function filter_woocommerce_new_customer_data( $args ) {
// Returns true when viewing the checkout page.
if ( ! is_checkout() ) {
$args['role'] = 'registered_user';
}
return $args;
}
add_filter( 'woocommerce_new_customer_data', 'filter_woocommerce_new_customer_data', 10, 1 );
我想为在我的网站上注册的客户分配自定义用户角色,除非注册是通过 WooCommerce 结帐表格完成的。
我已经尝试了几种方法,但没有任何方法只针对登录页面上的注册表单。我已经设置了一个自定义用户角色,名为“registered_user”。
此代码有效,但同时针对登录页面上的注册表单和用户通过结帐注册时的表单。
add_filter( 'woocommerce_new_customer_data', 'assign_custom_role' );
function assign_custom_role( $args ) {
$args['role'] = 'registered_user';
return $args;
}
它还增加了一个额外的角色,所以现在用户同时拥有“客户”和“registered_user”角色。
我也尝试过向 WooCommerce form_login.php 添加一个隐藏的表单字段 <input type="hidden" name="front_end_reg_form">
试图以以下方式定位表单:
function add_user_role_frontend_reg( $user_id ) {
if($_POST['front_end_reg_form'] == 'front_end_reg_form')
{
$user = new WP_User( $user_id );
$user->remove_role( 'customer' );
$user->add_role( 'registered_user' );
}
}
add_action('user_register', 'add_user_role_frontend_reg', 10, 1);
上面的代码没有做任何事情。如果我将挂钩更改为 add_filter( 'woocommerce_new_customer_data', 'add_user_role_frontend_reg' );
,我会收到错误消息:无法创建具有空登录名的用户。
所以我卡住了。我做错了什么,我该如何纠正?
这实际上可以很容易地通过使用is_checkout()
条件标签来完成,如果没有,调整用户角色
所以你得到:
function filter_woocommerce_new_customer_data( $args ) {
// Returns true when viewing the checkout page.
if ( ! is_checkout() ) {
$args['role'] = 'registered_user';
}
return $args;
}
add_filter( 'woocommerce_new_customer_data', 'filter_woocommerce_new_customer_data', 10, 1 );