代码之家  ›  专栏  ›  技术社区  ›  eMikkelsen

在WooCommerce中根据所选配送有条件地隐藏签出字段

  •  2
  • eMikkelsen  · 技术社区  · 7 年前

    在WooCommerce,我试图隐藏 公司名称字段 无论何时选择“送货上门”。我试过很多不同的方法。

    这是我最后一次尝试:

    add_filter('woocommerce_checkout_fields', 'xa_remove_billing_checkout_fields');
    
    function xa_remove_billing_checkout_fields($fields) {
        $shipping_method ='pakkelabels_shipping_gls1'; // Set the desired shipping method to hide the checkout field(s).
        global $woocommerce;
        $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
        $chosen_shipping = $chosen_methods[0];
    
        if ($chosen_shipping == $shipping_method) {
            unset($fields['billing']['billing_company']); // Add/change filed name to be hide
    }
        return $fields;
    }
    

    但它所做的只是移动 船运公司 从第一个字段到最后一个字段。

    如何根据选择的发货方式有条件地隐藏特定的签出字段?

    1 回复  |  直到 7 年前
        1
  •  5
  •   LoicTheAztec    4 年前

    由于这是一个实时事件,您需要使用javascript/jQuery使其工作。计费公司必须 不需要的 与默认WooCommerce签出页面类似。

    选择“送货上门”时,以下代码将隐藏“帐单公司”字段:

    // Conditional Show hide checkout fields based on chosen shipping methods
    add_action( 'wp_footer', 'conditionally_hidding_billing_company' );
    function conditionally_hidding_billing_company(){
        // Only on checkout page
        if( ! ( is_checkout() && ! is_wc_endpoint_url() ) ) return;
    
        // HERE your shipping methods rate ID "Home delivery"
        $home_delivery = 'pakkelabels_shipping_gls1';
        ?>
        <script>
            jQuery(function($){
                // Choosen shipping method selectors slug
                var shipMethod = 'input[name^="shipping_method"]',
                    shipMethodChecked = shipMethod+':checked';
    
                // Function that shows or hide imput select fields
                function showHide( actionToDo='show', selector='' ){
                    if( actionToDo == 'show' )
                        $(selector).show( 200, function(){
                            $(this).addClass("validate-required");
                        });
                    else
                        $(selector).hide( 200, function(){
                            $(this).removeClass("validate-required");
                        });
                    $(selector).removeClass("woocommerce-validated");
                    $(selector).removeClass("woocommerce-invalid woocommerce-invalid-required-field");
                }
    
                // Initialising: Hide if choosen shipping method is "Home delivery"
                if( $(shipMethodChecked).val() == '<?php echo $home_delivery; ?>' )
                    showHide('hide','#billing_company_field' );
    
                // Live event (When shipping method is changed)
                $( 'form.checkout' ).on( 'change', shipMethod, function() {
                    if( $(shipMethodChecked).val() == '<?php echo $home_delivery; ?>' )
                        showHide('hide','#billing_company_field');
                    else
                        showHide('show','#billing_company_field');
                });
            });
        </script>
        <?php
    }
    

    代码进入功能。活动子主题(或主题)的php文件或任何插件文件。

    已测试并正常工作。