2017-01-18 16 views
0

で表示/非表示フィールド:カスタムチェックアウトフィールド:この作業の回答に基づいて、セレクタ

// Registering external jQuery/JS file 
function cfields_scripts() { 

    // IMPORTANT NOTE: 
    // For a child theme replace get_template_directory_uri() by get_stylesheet_directory_uri() 
    // The external cfields.js file goes in a subfolder "js" of your active child theme or theme. 
    wp_enqueue_script('checkout_script', get_template_directory_uri().'/js/cfields.js', array('jquery'), '1.0', true); 

} 
add_action('wp_enqueue_scripts', 'cfields_scripts'); 


add_filter('woocommerce_checkout_fields', 'ba_custom_checkout_billing_fields'); 
function ba_custom_checkout_billing_fields($fields) { 

    // 1. Creating the additional custom billing fields 

    // The "status" selector 
    $fields['billing']['billing_status']['type'] = 'select'; 
    $fields['billing']['billing_status']['class'] = array('form-row-wide, status-select'); 
    $fields['billing']['billing_status']['required'] = true; 
    $fields['billing']['billing_status']['label'] = __('Statut Juridic', 'theme_domain'); 
    $fields['billing']['billing_status']['placeholder'] = __('Alege statutul', 'theme_domain'); 
    $fields['billing']['billing_status']['options'] = array(
     '1' => __('Persoana Fizica', 'theme_domain'), 
     '2' => __('Persoana Juridica', 'theme_domain') 
    ); 

    // The "Nr. registrul comertului" text field (this field is common) 
    $fields['billing']['billing_ser_id']['type'] = 'text'; 
    $fields['billing']['billing_ser_id']['class'] = array('form-row-wide', 'status-group2'); 
    $fields['billing']['billing_ser_id']['required'] = true; // <== HERE has to be "true" as it always be shown and need validation 
    $fields['billing']['billing_ser_id']['label'] = __('Nr. Reg. Comert', 'theme_domain'); 
    $fields['billing']['billing_ser_id']['placeholder'] = __('Introdu numarul', 'theme_domain'); 

    // The "Banca" text field 
    $fields['billing']['billing_bt_id']['type'] = 'text'; 
    $fields['billing']['billing_bt_id']['class'] = array('form-row-wide', 'status-group2'); 
    $fields['billing']['billing_bt_id']['required'] = false; 
    $fields['billing']['billing_bt_id']['label'] = __('Banca', 'theme_domain'); 
    $fields['billing']['billing_bt_id']['placeholder'] = __('Adauga Banca', 'theme_domain'); 

    // The "IBAN" text field 
    $fields['billing']['billing_ib_id']['type'] = 'text'; 
    $fields['billing']['billing_ib_id']['class'] = array('form-row-wide', 'status-group2'); 
    $fields['billing']['billing_ib_id']['required'] = false; 
    $fields['billing']['billing_ib_id']['label'] = __('IBAN', 'theme_domain'); 
    $fields['billing']['billing_ib_id']['placeholder'] = __('Adauga IBAN-ul', 'theme_domain'); 

    // The "CIF" text field 
    $fields['billing']['billing_cf_id']['type'] = 'text'; 
    $fields['billing']['billing_cf_id']['class'] = array('form-row-wide', 'status-group2'); 
    $fields['billing']['billing_cf_id']['required'] = false; 
    $fields['billing']['billing_cf_id']['label'] = __('Cod Fiscal', 'theme_domain'); 
    $fields['billing']['billing_cf_id']['placeholder'] = __('Adauga CIF-ul', 'theme_domain'); 


    // 2. Ordering the billing fields 

    $fields_order = array(
     'billing_first_name', 'billing_last_name', 'billing_email', 
     'billing_phone',  'billing_address_1', 'billing_address_2', 
     'billing_postcode', 'billing_city',  'billing_country', 
     'billing_status',  'billing_company', 'billing_ser_id', 
     'billing_bt_id',  'billing_ib_id',  'billing_cf_id' 
    ); 

    foreach($fields_order as $field) 
     $ordered_fields[$field] = $fields['billing'][$field]; 

    $fields['billing'] = $ordered_fields; 


    // 4. Returning Checkout customized billing fields 
    return $fields; 

} 


// Process the checkout (Checking if required fields are not empty) 
add_action('woocommerce_checkout_process', 'ba_custom_checkout_field_process'); 
function ba_custom_checkout_field_process() { 

    if (! $_POST['billing_ser_id']) 
     wc_add_notice(__('<strong>Nr. Reg. Comert</strong> is a required field.', 'theme_domain'), 'error'); 

    if (! $_POST['billing_bt_id']) 
     wc_add_notice(__('<strong>Banca</strong> is a required field.', 'theme_domain'), 'error'); 

    if (! $_POST['billing_ib_id']) 
     wc_add_notice(__('<strong>IBAN</strong> is a required field.', 'theme_domain'), 'error'); 

    if (! $_POST['billing_cf_id']) 
     wc_add_notice(__('<strong>Cod Fiscal</strong> is a required field.', 'theme_domain'), 'error'); 
} 


// Adding/Updating meta data to the order with the custom-fields values 
add_action('woocommerce_checkout_update_order_meta', 'ba_custom_checkout_field_update_order_meta'); 
function ba_custom_checkout_field_update_order_meta($order_id) { 

    $billing_company = $_POST['billing_company']; 
    $billing_ser_id = $_POST['billing_ser_id']; 
    $billing_bt_id = $_POST['billing_bt_id']; 
    $billing_ib_id = $_POST['billing_ib_id']; 
    $billing_cf_id = $_POST['billing_cf_id']; 

    // For Individual resetting billing company to "" (no value) instead of 'no' 
    if (!empty($billing_company) && 'no' == $billing_company) 
     update_post_meta($order_id, '_billing_company', ''); 

    if (!empty($billing_ser_id)) 
     update_post_meta($order_id, '_billing_ser_id', sanitize_text_field($billing_ser_id)); 

    // Adding/updating data only for companies 
    if (!empty($billing_bt_id) && 'no' != $billing_bt_id) 
     update_post_meta($order_id, '_billing_bt_id', sanitize_text_field($billing_bt_id)); 

    // Adding/updating data only for companies 
    if (!empty($billing_ib_id) && 'no' != $billing_ib_id) 
     update_post_meta($order_id, '_billing_ib_id', sanitize_text_field($billing_ib_id)); 

    // Adding/updating data only for companies 
    if (!empty($billing_cf_id) && 'no' != $billing_cf_id) 
     update_post_meta($order_id, '_billing_cf_id', sanitize_text_field($billing_cf_id)); 
} 

はありがとうページで顧客の注文ビューのデータを表示するには、マイアカウントの順序ビューと電子メール通知に、あなたのfunction.phpファイルで、この2つのコードスニペットを追加します。

// Displaying data on order view in "customer details" zone 
add_action('woocommerce_order_details_after_customer_details','ba_add_values_to_order_item_meta', 10, 1); 
function ba_add_values_to_order_item_meta($order) { 

    $output = ''; 
    $billing_ser_id = get_post_meta($order->id, '_billing_ser_id', true); 
    $billing_bt_id = get_post_meta($order->id, '_billing_bt_id', true); 
    $billing_ib_id = get_post_meta($order->id, '_billing_ib_id', true); 
    $billing_cf_id = get_post_meta($order->id, '_billing_cf_id', true); 

    if (!empty($billing_ser_id)) 
     $output .= ' 
     <tr> 
      <th>' . __("Nr. Reg. Comert:", "woocommerce") . '</th> 
      <td>' . $billing_ser_id . '</td> 
     </tr>'; 

    if (!empty($billing_bt_id) && 'no' != $billing_bt_id) 
     $output .= ' 
     <tr> 
      <th>' . __("Banca:", "woocommerce") . '</th> 
      <td>' . $billing_bt_id . '</td> 
     </tr>'; 

    if (!empty($billing_ib_id) && 'no' != $billing_ib_id) 
     $output .= ' 
     <tr> 
      <th>' . __("IBAN:", "woocommerce") . '</th> 
      <td>' . $billing_ib_id . '</td> 
     </tr>'; 

    if (!empty($billing_cf_id) && 'no' != $billing_cf_id) 
     $output .= ' 
     <tr> 
      <th>' . __("Cod Fiscal:", "woocommerce") . '</th> 
      <td>' . $billing_cf_id . '</td> 
     </tr>'; 

    echo $output; 
} 


// Displaying data on email notifications 
add_action('woocommerce_email_customer_details','ba_add_values_to_emails_notifications', 15, 4); 
function ba_add_values_to_emails_notifications($order, $sent_to_admin, $plain_text, $email) { 

    $output = '<ul>'; 
    $billing_ser_id = get_post_meta($order->id, '_billing_ser_id', true); 
    $billing_bt_id = get_post_meta($order->id, '_billing_bt_id', true); 
    $billing_ib_id = get_post_meta($order->id, '_billing_ib_id', true); 
    $billing_cf_id = get_post_meta($order->id, '_billing_cf_id', true); 

    if (!empty($billing_ser_id)) 
     $output .= '<li><strong>' . __("Nr. Reg. Comert:", "woocommerce") . '</strong> <span class="text">' . $billing_ser_id . '</span></li>'; 

    if (!empty($billing_bt_id) && 'no' != $billing_bt_id) 
     $output .= '<li><strong>' . __("Banca:", "woocommerce") . '</strong> <span class="text">' . $billing_bt_id . '</span></li>'; 

    if (!empty($billing_ib_id) && 'no' != $billing_ib_id) 
     $output .= '<li><strong>' . __("IBAN:", "woocommerce") . '</strong> <span class="text">' . $billing_ib_id . '</span></li>'; 

    if (!empty($billing_cf_id) && 'no' != $billing_cf_id) 
     $output .= '<li><strong>' . __("Cod Fiscal:", "woocommerce") . '</strong> <span class="text">' . $billing_cf_id . '</span></li>'; 
     $output .= '</ul>'; 

    echo $output; 
} 

Javascriptがコード(外部ファイル)をcfields.js:

// This file named "cfields.js" goes in a subfolder "js" of your active child theme or theme 

jQuery(document).ready(function($){ 

    // Common Serial ID field 
    if(! $("#billing_ser_id_field").hasClass("validate-required")){ 
     $("#billing_ser_id_field").addClass("validate-required"); 
    } 


    // The 4 Fields to hide at start (if not "Persoana Juridica") 
    if($("#billing_status option:selected").val() == "1"){ 
     $('#billing_company_field').hide(function(){ 
      $(this).removeClass("validate-required"); 
      $(this).removeClass("woocommerce-validated"); 
      $('#billing_company').val("no"); 
     }); 
     $('#billing_bt_id_field').hide(function(){ 
      $(this).removeClass("validate-required"); 
      $(this).removeClass("woocommerce-validated"); 
      $('#billing_bt_id').val("no"); 
     }); 
     $('#billing_ib_id_field').hide(function(){ 
      $(this).removeClass("validate-required"); 
      $(this).removeClass("woocommerce-validated"); 
      $('#billing_ib_id').val("no"); 
     }); 
     $('#billing_cf_id_field').hide(function(){ 
      $(this).removeClass("validate-required"); 
      $(this).removeClass("woocommerce-validated"); 
      $('#billing_cf_id').val("no"); 
     }); 
    } 

    // Action with the selector (Showing/hiding and adding/removing classes) 
    $("#billing_status").change(function(){ 
     // For "Persoana Juridica" 
     if($("#billing_status option:selected").val() == "2") 
     { 
      $('#billing_company_field').show(function(){ 
       $(this).addClass("validate-required"); 
       $('#billing_company').val(""); 
      }); 
      $('#billing_bt_id_field').show(function(){ 
       $(this).children('label').append(' <abbr class="required" title="required">*</abbr>'); 
       $(this).addClass("validate-required"); 
       $('#billing_bt_id').val(""); 
      }); 
      $('#billing_ib_id_field').show(function(){ 
       $(this).children('label').append(' <abbr class="required" title="required">*</abbr>'); 
       $(this).addClass("validate-required"); 
       $('#billing_ib_id').val(""); 
      }); 
      $('#billing_cf_id_field').show(function(){ 
       $(this).children('label').append(' <abbr class="required" title="required">*</abbr>'); 
       $(this).addClass("validate-required"); 
       $('#billing_cf_id').val(""); 
      }); 
     } 
     // For "Persoana Fizica" 
     else if($("#billing_status option:selected").val() == "1") 
     { 
      $('#billing_company_field').hide(function(){ 
       $(this).removeClass("validate-required"); 
       $(this).removeClass("woocommerce-validated"); 
       $('#billing_company').val("no"); 
      }); 
      $('#billing_bt_id_field').hide(function(){ 
       $(this).children("abbr.required").remove(); 
       $(this).removeClass("validate-required"); 
       $(this).removeClass("woocommerce-validated"); 
       $('#billing_bt_id').val("no"); 
      }); 
      $('#billing_ib_id_field').hide(function(){ 
       $(this).children("abbr.required").remove(); 
       $(this).removeClass("validate-required"); 
       $(this).removeClass("woocommerce-validated"); 
       $('#billing_ib_id').val("no"); 
      }); 
      $('#billing_cf_id_field').hide(function(){ 
       $(this).children("abbr.required").remove(); 
       $(this).removeClass("validate-required"); 
       $(this).removeClass("woocommerce-validated"); 
       $('#billing_cf_id').val("no"); 
      }); 
     } 

    }); 

}); 

私の質問は、どのようにして2番目のオプション "Persoana Juridica"から "CNP"という共通フィールドを削除できますか?

答えて

1

あなただけfalse(代わりの真)にba_custom_checkout_billing_fieldsあなたのフック関数の中で、このライン値を変更する必要があります。

$fields['billing']['billing_ser_id']['required'] = false; 

その後、我々は少しもこのフック機能を変更:

// Adding/Updating meta data to the order with the custom-fields values 
add_action('woocommerce_checkout_update_order_meta', 'ba_custom_checkout_field_update_order_meta'); 
function ba_custom_checkout_field_update_order_meta($order_id) { 

    $billing_company = $_POST['billing_company']; 
    $billing_ser_id = $_POST['billing_ser_id']; 
    $billing_bt_id = $_POST['billing_bt_id']; 
    $billing_ib_id = $_POST['billing_ib_id']; 
    $billing_cf_id = $_POST['billing_cf_id']; 

    if (!empty($billing_company) && 'no' == $billing_company) 
     update_post_meta($order_id, '_billing_company', ''); 

    ## Here we add 'no' == $billing_ser_id to the condition 
    if (!empty($billing_ser_id) && 'no' == $billing_ser_id) 
     update_post_meta($order_id, '_billing_ser_id', sanitize_text_field($billing_ser_id)); 

    if (!empty($billing_bt_id) && 'no' != $billing_bt_id) 
     update_post_meta($order_id, '_billing_bt_id', sanitize_text_field($billing_bt_id)); 

    if (!empty($billing_ib_id) && 'no' != $billing_ib_id) 
     update_post_meta($order_id, '_billing_ib_id', sanitize_text_field($billing_ib_id)); 

    if (!empty($billing_cf_id) && 'no' != $billing_cf_id) 
     update_post_meta($order_id, '_billing_cf_id', sanitize_text_field($billing_cf_id)); 
} 

そして、この更新されたJSファイルを置き換える必要があります:

jQuery(document).ready(function($){ 

    // The 4 Fields to hide at start (if not "Persoana Juridica") 
    if($("#billing_status option:selected").val() == "1"){ 
     $('#billing_company_field').hide(function(){ 
      $(this).removeClass("validate-required"); 
      $(this).removeClass("woocommerce-validated"); 
      $('#billing_company').val("no"); 
     }); 
     $('#billing_bt_id_field').hide(function(){ 
      $(this).removeClass("validate-required"); 
      $(this).removeClass("woocommerce-validated"); 
      $('#billing_bt_id').val("no"); 
     }); 
     $('#billing_ib_id_field').hide(function(){ 
      $(this).removeClass("validate-required"); 
      $(this).removeClass("woocommerce-validated"); 
      $('#billing_ib_id').val("no"); 
     }); 
     $('#billing_cf_id_field').hide(function(){ 
      $(this).removeClass("validate-required"); 
      $(this).removeClass("woocommerce-validated"); 
      $('#billing_cf_id').val("no"); 
     }); 
    } 

    // Action with the selector (Showing/hiding and adding/removing classes) 
    $("#billing_status").change(function(){ 
     // For "Persoana Juridica" 
     if($("#billing_status option:selected").val() == "2") 
     { 
      $('#billing_company_field').show(function(){ 
       $(this).addClass("validate-required"); 
       $('#billing_company').val(""); 
      }); 
      $('#billing_bt_id_field').show(function(){ 
       $(this).children('label').append(' <abbr class="required" title="required">*</abbr>'); 
       $(this).addClass("validate-required"); 
       $('#billing_bt_id').val(""); 
      }); 
      $('#billing_ib_id_field').show(function(){ 
       $(this).children('label').append(' <abbr class="required" title="required">*</abbr>'); 
       $(this).addClass("validate-required"); 
       $('#billing_ib_id').val(""); 
      }); 
      $('#billing_cf_id_field').show(function(){ 
       $(this).children('label').append(' <abbr class="required" title="required">*</abbr>'); 
       $(this).addClass("validate-required"); 
       $('#billing_cf_id').val(""); 
      }); 
      // Hide Serial ID field 
      $('#billing_ser_id_field').hide(function(){ 
       $(this).removeClass("validate-required"); 
       $(this).removeClass("woocommerce-validated"); 
       $('#billing_ser_id').val("no"); 
      }); 
     } 
     // For "Persoana Fizica" 
     else if($("#billing_status option:selected").val() == "1") 
     { 
      $('#billing_company_field').hide(function(){ 
       $(this).removeClass("validate-required"); 
       $(this).removeClass("woocommerce-validated"); 
       $('#billing_company').val("no"); 
      }); 
      $('#billing_bt_id_field').hide(function(){ 
       $(this).children("abbr.required").remove(); 
       $(this).removeClass("validate-required"); 
       $(this).removeClass("woocommerce-validated"); 
       $('#billing_bt_id').val("no"); 
      }); 
      $('#billing_ib_id_field').hide(function(){ 
       $(this).children("abbr.required").remove(); 
       $(this).removeClass("validate-required"); 
       $(this).removeClass("woocommerce-validated"); 
       $('#billing_ib_id').val("no"); 
      }); 
      $('#billing_cf_id_field').hide(function(){ 
       $(this).children("abbr.required").remove(); 
       $(this).removeClass("validate-required"); 
       $(this).removeClass("woocommerce-validated"); 
       $('#billing_cf_id').val("no"); 
      }); 
      // Showing Serial ID field 
      $('#billing_ser_id_field').show(function(){ 
       $(this).children('label').append(' <abbr class="required" title="required">*</abbr>'); 
       $(this).addClass("validate-required"); 
       $('#billing_ser_id').val(""); 
      }); 
     } 

    }); 

}); 

シリアルIDのカスタムフィールドが'Persoana Fizica'が選択されている場合にのみ表示されます。この場合のみ必須フィールドになりますこの方法です。

この最後の変更はテストされていませんが、これは変更の種類です。

+0

そして、私は* Persoana Juridicaの個人名も隠す必要があります* –

関連する問題