Woocommerce 在电子商务签出表单中隐藏/显示字段

Woocommerce 在电子商务签出表单中隐藏/显示字段,woocommerce,show-hide,checkout,Woocommerce,Show Hide,Checkout,我在woocommerce结帐表单中添加并创建了一个新字段 我还在订单页面和通知邮件中添加了该字段 我添加了一个复选框字段,用于隐藏或显示我的新字段 我的问题:新字段是必填字段,我希望它在隐藏时成为可选字段 // 1 Display a custom field on checkout and on My account > edit billing address add_filter( 'woocommerce_billing_fields' , 'adding_billing_cod

我在woocommerce结帐表单中添加并创建了一个新字段

我还在订单页面和通知邮件中添加了该字段

我添加了一个复选框字段,用于隐藏或显示我的新字段

我的问题:新字段是必填字段,我希望它在隐藏时成为可选字段

// 1 Display a custom field on checkout and on My account > edit billing address
add_filter( 'woocommerce_billing_fields' , 'adding_billing_codice_iva', 20, 1 );
function adding_billing_codice_iva ( $fields ) {
    $fields['billing_codice_iva'] = array(
        'label'       => __('Partita Iva | VAT', 'woocommerce'),
        'placeholder' => _x('Inserisci la partita iva', 'placeholder', 'woocommerce'),
        'class'       => array('form-row-wide'),
        'required'    => true,
        'clear'       => true,
    );
    return $fields;
}

// 2 Save the custom field data to the order meta data and to user meta data
add_action( 'woocommerce_checkout_create_order', 'codice_iva_order_meta', 20, 2 );
function codice_iva_order_meta( $order, $data ) {
    if ( isset( $_POST['billing_codice_iva'] ) && ! empty( $_POST['billing_codice_iva'] ) ) {
        $order->update_meta_data('_billing_codice_iva', sanitize_text_field($_POST['billing_codice_iva']) );

        update_user_meta( $order->get_customer_id(), 'billing_codice_iva', sanitize_text_field($_POST['billing_codice_iva']) );
    }
}

// 3 Order pages (frontend and admin): Display custom field "codice iva"
add_filter( 'woocommerce_order_details_after_order_table' , 'display_admin_order_meta_codice_iva', 20, 1 ); // Front
add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_admin_order_meta_codice_iva', 20, 1 ); // Admin
function display_admin_order_meta_codice_iva( $order ){
    $codice_iva = $order->get_meta('_billing_codice_iva', true );
    if( ! empty( $codice_iva ) ){
        $label = __('Partita Iva | VAT');
        if( is_admin() ){ // Admin
            echo '<p><strong>' . $label . ':</strong> ' . $codice_iva . '</p>';
        }
        else { // Front end: order view and Order received (thankyou)
            echo '<table class="woocommerce-table"><tbody><tr>
            <th>' . $label . ':</th><td>' . $codice_iva . '</td>
            </tr></tbody></table>';
        }
    }
}

// 4 Email notifications: Display custom field "codice iva"
add_filter( 'woocommerce_email_order_meta_fields' , 'display_email_codice_iva', 20, 3 );
function display_email_codice_iva ( $fields, $sent_to_admin, $order ) {
    $codice_iva = $order->get_meta('_billing_codice_iva', true );
    if( ! empty( $codice_iva ) )
        $fields['codice_iva'] = array(
            'label' => __("Partita Iva | VAT"),
            'value' => $codice_iva,
        );
    return $fields;
}

// 5 Add a Checkbox to Hide/Show Checkout Field - WooCommerce

add_filter( 'woocommerce_checkout_fields' , 'bbloomer_display_checkbox_and_new_checkout_field' );
function bbloomer_display_checkbox_and_new_checkout_field( $fields ) {
    $fields['billing']['checkbox_trigger'] = array(
        'type'      => 'checkbox',
        'label'     => __('Sei una azienda', 'woocommerce'),
        'class'     => array('form-row-wide'),
        'clear'     => true
    );
    return $fields;
}

// 6 Hide/Show Checkout Field action - WooCommerce
add_action( 'woocommerce_after_checkout_form', 'bbloomer_conditionally_hide_show_billing_codice_iva', 9999 );
function bbloomer_conditionally_hide_show_billing_codice_iva() {
    wc_enqueue_js( "jQuery('input#checkbox_trigger').change(function(){
        if (! this.checked) {
            // HIDE IF NOT CHECKED
            jQuery('#billing_codice_iva_field').fadeOut();
            jQuery('#billing_codice_iva_field input').val('');
        } else {
            // SHOW IF CHECKED
            jQuery('#billing_codice_iva_field').fadeIn();
        }
    }).change();");
}
//1在结帐和我的帐户上显示自定义字段>编辑帐单地址
添加过滤器('woocommerce\u billing\u fields','adding\u billing\u codice\u iva',20,1);
函数添加\账单\密码\ iva($fields){
$fields['billing\u codice\u iva']=数组(
“标签”=>“‘增值税’、‘商业’”,
“占位符”=>\ux('Inserisci la partita iva','placeholder','woocommerce'),
'class'=>array('form-row-wide'),
“必需”=>true,
“清除”=>正确,
);
返回$fields;
}
//2将自定义字段数据保存到订单元数据和用户元数据
添加操作('woocommerce\u checkout\u create\u order'、'codice\u iva\u order\u meta',20,2);
函数codice\u iva\u order\u meta($order,$data){
如果(设置($_POST['billing_codice_iva'])和($_POST['billing_codice_iva'])为空($_POST['billing_iva'])){
$order->update_meta_数据(“'u billing_codice_iva',sanitize_text_字段($u POST['billing_codice_iva'));
更新_user_meta($订单->获取_客户_id(),'billing_codice_iva',清理_text_字段($_POST['billing_codice_iva'));
}
}
//3个订单页面(前端和管理):显示自定义字段“codice iva”
添加过滤器('woocommerce\u order\u details\u after\u order\u table','display\u admin\u order\u meta\u codice\u iva',20,1);//正面
添加操作('woocommerce_admin_order_data_after_billing_address','display_admin_order_meta_codice_iva',20,1);//管理
功能显示\管理\订单\元\代码\ iva($order){
$codice\u iva=$order->get\u meta(“'u billing\u codice\u iva',true);
如果(!空($codice_iva)){
$label=uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuiva部分(增值税));
如果(是_admin()){//admin
回显“”.$label.”:“.$codice_iva.”

”; } else{//前端:订单视图和订单接收(谢谢) 回声' “.$label.”:“.$codice_iva.” '; } } } //4电子邮件通知:显示自定义字段“codice iva” 添加过滤器('woocommerce\u email\u order\u meta\u fields','display\u email\u codice\u iva',20,3); 功能显示\u电子邮件\u密码\u iva($fields,$sent\u to\u admin,$order){ $codice\u iva=$order->get\u meta(“'u billing\u codice\u iva',true); 如果(!空($codice_iva)) $fields['codice_iva']=数组( “标签”=>(“第四部分增值税”), “值”=>$codice_iva, ); 返回$fields; } //5添加复选框以隐藏/显示签出字段-WooCommerce 添加过滤器(“woocommerce\u签出\u字段”、“bbloomer\u显示\u复选框\u和\u新建\u签出\u字段”); 功能bbloomer\u display\u checkbox\u和\u new\u checkout\u字段($fields){ $fields['billing']['checkbox\u trigger']=array( '键入'=>'复选框', “标签”=>“'Sei una azienda','woocommerce'), 'class'=>array('form-row-wide'), “清除”=>true ); 返回$fields; } //6隐藏/显示签出字段操作-WooCommerce 添加操作('woocommerce'在结帐表之后,'bbloomer'有条件地隐藏\u显示\u账单\u密码\u iva',9999); 函数bbloomer\u有条件地\u隐藏\u显示\u计费\u代码\u iva(){ wc_enqueue_js(“jQuery('input#checkbox_trigger')。更改(函数(){ 如果(!this.checked){ //如果未选中,则隐藏 jQuery(“#账单#密码(iva)字段”).fadeOut(); jQuery(“#账单#密码(iva)字段输入”).val(“”); }否则{ //显示是否选中 jQuery(“#账单#codice_iva_字段”).fadeIn(); } }).change();”; }