2017-06-22 12 views
1

私はWordpressとWooCommerceを使用してサイトを構築しています。私はにあるチェックボックスを必要とする 登録フォームでロールを選択する(Woocommerce)

(異なる価格とaditional製品を持っているこのユーザーを)

  1. 通常の顧客(woocommerceのデフォルトの顧客)
  2. B2B顧客:このサイトは、クライアントの2種類を持っている必要があります登録フォームに表示されます。

    ユーザーがチェックボックスをオンにすると、b2bロールが割り当てられ、追加フィールドが表示されて登録が完了します。

    私は聖霊降臨祭にこのコードをtriyingてる

    EDIT:

    /*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; 
          } 
        } 
    

    しかし、今問題は、ユーザーがチェックボックス

答えて

1

パート1をチェクテキストフィールドを示しています。

開始時

2つのオプションがあり、

  1. ページ
  2. のスタートに必要なフィールドを追加し、あなたがページの最後に必要なフィールドを追加します。

これは、woocommerce_register_form_startフックまたはwoocommerce_register_formによって実行できます。

私が考えることができる唯一の方法は、デフォルトではすべてのフィールドを含めることですが、チェックボックスをクリックするとJS/JQでフィールドを表示します。 これは、フィールドを追加する部分を修正します。

パート2 送信されたフォームのバリデーション

フックwoocommerce_register_postを使用して、サーバに送り返された登録データを手に入れます。サーバー側からも検証します。ボックスがチェックされ、関連するすべてのフィールドにも必要なデータが含まれているとし、フィールドもサニタイズするとします。

パート3 追加のデータと追加のロールをユーザーに追加します。

今度はuser_registerフックを使用して、新しく登録したユーザーのIDを取得します。そしてそこに新しいデータを追加します。

このフックはすべてのユーザーレジスタで発生するので、このユーザーが顧客であることを確認する検証を追加してから、このユーザーがフロントエンドフォームを介して登録されていることを確認してください。通常は変数$_POSTをチェックすることで行うことができます。 これを実現するには、wp_update_useradd_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); 

は、この情報がお役に立てば幸いです。

+0

パート3の詳細を記載したり、例を挙げたりできますか? –

+0

@AlejandroGarrido、ありがとう、コードでの答えを更新しました。さらなる助けが必要な場合は私にpingしてください。ではごきげんよう。 –

関連する問題