Wordpress 选择注册表格中的角色(Woocommerce)

Wordpress 选择注册表格中的角色(Woocommerce),wordpress,woocommerce,registration,Wordpress,Woocommerce,Registration,我正在用Wordpress和WooCommerce建立一个网站。此站点需要有两种类型的客户端: 普通客户(woocommerce的默认客户) B2B客户(此用户具有不同的价格和传统产品) 我需要一个复选框出现在注册表上 当用户标记该复选框时,将分配b2b角色,并显示其他字段以完成注册 编辑 我正在用这个密码玩游戏: /*checkbox*/ add_action('woocommerce_after_checkout_billing_form', 'mostrar_campo_n

我正在用Wordpress和WooCommerce建立一个网站。此站点需要有两种类型的客户端:

  • 普通客户(woocommerce的默认客户)
  • B2B客户(此用户具有不同的价格和传统产品)
  • 我需要一个复选框出现在注册表上

    当用户标记该复选框时,将分配b2b角色,并显示其他字段以完成注册

    编辑

    我正在用这个密码玩游戏:

        /*checkbox*/
        add_action('woocommerce_after_checkout_billing_form', 'mostrar_campo_nif_profesionales');
    
        function mostrar_campo_nif_profesionales( $checkout ) {
    
        echo '<div id="mostrar_campo_nif_profesionales"><h3>'.__('¿Eres un profesional?').'</h3>';
    
        woocommerce_form_field( 'check_profesional', array(
        'type' => 'checkbox',
        'class' => array('checkbox-profesionales form-row-wide'),
        'label' => __('Profesional?'),
        'required'  => false,
        ), $checkout->get_value( 'profesional' ));
    
        echo '</div>';
        }
    
    
        /*the field must appears when the checkbox are checked*/
        if ("DON'T KNOW WHAT CONDITION MUST BE WRITE HERE") {
    
                    /*** Añadir campo personalizado a página de checkout ***/
                add_action('woocommerce_after_checkout_billing_form', 'campo_nif_profesionales');
    
                function campo_nif_profesionales( $checkout ) {
    
                echo '<div id="campo_nif_profesionales"><h3>'.__('NIF/CIF').'</h3>';
    
                woocommerce_form_field( 'NIF', array(
                'type' => 'text',
                'class' => array('my-field-class form-row-wide'),
                'label' => __('NIF/CIF'),
                'placeholder' => __('Introduzca su NIF/CIF'),
                'required'  => true,
                ), $checkout->get_value( 'NIF' ));
    
                echo '</div>';
                }
    
                /*** Validación del campo personalizado ***/
                add_action('woocommerce_checkout_process', 'campo_nif_profesionales_process');
    
                function campo_nif_profesionales_process() {
                global $woocommerce;
    
                // Comprobar si el campo ha sido completado, en caso contrario agregar un error.
                if (!$_POST['NIF'])
                $woocommerce->add_error( __('Por favor introduce tu NIF o CIF.') );
                }
    
    
    
    
    
                /*** Incluir campo personalizado a formato de orden ***/
                add_action('woocommerce_checkout_update_order_meta', 'campo_nif_profesionales_update_order_meta');
    
                function campo_nif_profesionales_update_order_meta( $order_id ) {
                if ($_POST['NIF']) update_post_meta( $order_id, 'NIF/CIF', esc_attr($_POST['NIF']));
                }
    
                /*** Incluir campo personalizado a correos electrónicos de órdenes ***/
                add_filter('woocommerce_email_order_meta_keys', 'campo_nif_profesionales_order_meta_keys');
    
                function campo_nif_profesionales_order_meta_keys( $keys ) {
                  $keys[] = 'NIF/CIF';
                    return $keys;
                }
        }
    
    /*复选框*/
    添加行动(“结帐后的商业结算表”、“mostrar\u campo\u nif\u Professionales”);
    功能mostrar_campo_nif_Professionales($checkout){
    回音'。'是非专业的?';
    woocommerce\u form\u字段('check\u Professional',数组(
    '键入'=>'复选框',
    'class'=>array('checkbox-professionales表单行宽'),
    “标签”=>(专业?),
    “必需”=>false,
    ),$checkout->get_value('professional');
    回声';
    }
    /*选中复选框时,该字段必须出现*/
    if(“不知道必须在此处写入什么条件”){
    /***Añadir campo做了一个página de checkout***/
    添加行动(“结帐后的商业结算表”、“专业活动”);
    功能campo_nif_Professionales($checkout){
    回显'.''NIF/CIF')';
    表单字段('NIF',数组)(
    '类型'=>'文本',
    'class'=>array('my-field-class表单行宽'),
    “标签”=>(NIF/CIF),
    “占位符”=>uuuuuuuuuuuuuuuz('Introzca su NIF/CIF'),
    “必需”=>true,
    ),$checkout->get_值('NIF');
    回声';
    }
    /***德尔坎波瓦利达奇奥酒店***/
    添加行动(“商业结帐流程”、“专业销售流程”);
    功能campo_nif_专业流程(){
    全球商业;
    //这是一个复杂的过程,相反,这是一个错误。
    如果(!$\u POST['NIF'])
    $woocommerce->add_error(uuu('Por favor introduct tu NIF o CIF');
    }
    /***包括对客户进行个性化定制***/
    添加动作(“woocommerce检查更新订单元数据”、“campo nif专业销售更新订单元数据”);
    函数campo\u nif\u professionales\u update\u order\u meta($order\u id){
    如果($发布['NIF'])更新发布元($订单id,'NIF/CIF',esc\U属性($发布['NIF']);
    }
    /***包括康普·德尔德内斯电力公司***/
    添加过滤器(“woocommerce\u email\u order\u meta\u keys”、“campo\u nif\u Professionales\u order\u meta\u keys”);
    功能campo\u nif\u Professionales\u order\u meta\u键($键){
    $keys[]=“NIF/CIF”;
    返回$keys;
    }
    }
    

    但现在的问题是,当用户选中复选框时,只显示文本字段。

    第1部分。

    一开始有两种选择

  • 在页面开头添加所需的字段
  • 在页面末尾添加所需的字段
  • 这可以通过
    woocommerce\u register\u form\u start
    hook或
    woocommerce\u register\u form
    完成

    在这里,我能想到的唯一方法是在默认情况下包含所有的字段,但只在使用时通过JS/JQ显示它们,单击复选框。 这将修复添加字段的部分

    第2部分。 验证提交的表格

    使用Hook
    woocommerce\u register\u post
    ,然后获取发送回服务器的注册数据。并从服务器端对其进行验证。说明是否选中该框,并且所有相关字段都具有必要的数据,并对字段进行清理

    第三部分。 现在向用户添加附加数据和附加角色

    现在使用
    user\u register
    hook并获取新注册用户的ID,然后在其中添加新数据

    需要注意的是,由于每个用户注册都会触发此钩子,因此首先添加验证以检查此用户是否为客户,然后通过前端表单检查此用户是否已注册,这通常可以通过检查
    $\u POST
    变量来完成。 使用
    wp\u update\u user
    add\u role
    功能来实现这一点

    第3部分的示例代码

    function add_user_additional_details_frontend_reg( $user_id )
    {
        $registered_user = get_user_by('ID',$user_id);
        if($registered_user) {
            $user_role = $registered_user->roles;
            if((in_array('customer', (array) $user_role))){
                /* The field below "front_end_cust_form" is just a hidden field I added to check and make sure that this is coming from the Front end Reg form where I added the additional fields */
                if($_POST['front_end_cust_form'] == 'front_end_cust_form')
                {
                    $first_name = $_POST['billing_first_name'];
                    $last_name = $_POST['billing_last_name'];
    
                    update_user_meta($user_id, 'billing_first_name', $first_name);
                    update_user_meta($user_id, 'billing_last_name', $last_name);
    
                    $update_data = array(
                        'ID' => $user_id,
                        'first_name' => $first_name,
                        'last_name' => $last_name
                    );
                    $user_id = wp_update_user($update_data);
                    $registered_user->add_role('custom_role');
                }
    
            }
        }
    }
    
    add_action( 'user_register', 'add_user_additional_details_frontend_reg', 10, 1 );
    

    希望这能有所帮助。

    您能详细介绍第3部分或举例说明吗?感谢you@AlejandroGarrido,已使用代码更新答案。如果你需要进一步的帮助,请告诉我。祝你一切顺利。