繁体   English   中英

除非通过结帐注册表创建帐户,否则如何在 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;
}

它还添加了一个额外的角色,因此现在用户同时具有“客户”和“注册用户”角色。

我还尝试将隐藏表单字段<input type="hidden" name="front_end_reg_form">添加到 WooCommerce form_login.php 尝试以以下方式定位表单:

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 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM