在 Woocommerce 中显示或隐藏两个结帐字段

Posted

技术标签:

【中文标题】在 Woocommerce 中显示或隐藏两个结帐字段【英文标题】:Show or Hide two checkout fields in Woocommerce 【发布时间】:2019-01-21 15:28:51 【问题描述】:

在 Woocommerce 结帐表单中,我首先尝试隐藏 billing_city 和 billing_address_1 字段,在填写完邮政编码和门牌号字段后,其他字段(address_1 和城市)必须显示。

这是脚本,但是我做的不好,不知道自己做错了什么:

?>
<script type="text/javascript">
    jQuery('input#billing_housenumber').change(function()

        if (this.checked) 
            jQuery('#billing_city').fadeIn();
            jQuery('#billing_city input').val('');           
         else 
            jQuery('#billing_city').fadeOut();
        

    );
</script>
<?php

感谢任何帮助。

【问题讨论】:

【参考方案1】:

更新 2

您的代码中有一些错误、错误和遗漏的东西。你也应该把它挂在一个函数中(或将它注册为一个外部文件)

我在最后添加了一个功能,在结帐时添加帐单“门牌号”字段(仅用于测试目的)...

在下面的代码中,我使用了一些 CSS 内联样式来隐藏 billing city 和 address_1 字段,并在它们有一个额外的选择器类“on”时显示它们。

这是一个钩子函数,它将仅在结帐时启用此代码:

add_action( 'wp_footer', 'custom_checkout_script' );
function custom_checkout_script() 
    // Only checkout page
    if( ! ( is_checkout() && ! is_wc_endpoint_url() ) ) return;

    // CSS Styles (Hidding fields)
    ?>
    <style>
        #billing_city_field, #billing_address_1_field  display:none !important;
        #billing_city_field.on ,#billing_address_1_field.on  display:block!important;
    </style>
    <?php 
    // Jquery script
    ?>
    <script type="text/javascript">
    jQuery( function($)
        var a = 'input#billing_housenumber',
            b = 'input#billing_postcode',
            c = '#billing_city_field,#billing_address_1_field';

        // On start
        if( $(a).val() != '' && $(b).val() != '' && ! $(c).hasClass('on') )
            $(c).css('display','none !important').addClass('on').show();
            console.log('start');
        

        // On change: If housenumber and postcode fields are filled, we display other hidden fields
        $(a+','+b).on( 'change', function()
            if ( $(a).val() != '' && $(b).val() != '' && ! $(c).hasClass('on') ) 
                $(c).css('display','none !important').addClass('on').show( 500 );
                console.log('change - in');
             else if( ( $(a).val() == '' || $(b).val() == '' ) && $(c).hasClass('on') ) 
                $(c).hide( 200, function()
                    $(c).removeClass('on').css('display','block')
                );
                console.log('change - out');
            
        );
    );
    </script>
    <?php

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。


此代码已使用此临时附加代码进行了测试,该代码生成结帐“门牌号”文本字段(仅用于测试目的):

// Add custom checkout field
add_action( 'woocommerce_billing_fields', 'my_custom_checkout_field' );
function my_custom_checkout_field( $fields ) 

     $fields['billing_housenumber'] = array(
        'class'     => array('form-row-wide'),
        'label'     => __('Housenumber ?'),
        'required'  => false,
        'clear'     => true
     );

     return $fields;

代码进入您的活动子主题(或活动主题)的 function.php 文件中。


相关:Show or hide html element on chosen shipping method change in Woocommerce

【讨论】:

有一个问题。我没有看到门牌号码(客户购买产品后)。因此,您不会在邮件或 quatation 中看到门牌号码。 @EminCelen 没有问题……因为需要额外的代码,您应该提出一个新问题。 哪里可以在另一个页面中提出新问题?还是将此页面作为新问题”? @EminCelen 在右上角,您有一个蓝色按钮:“提出问题”……点击它……这样它将打开一个全新的问题(空)。【参考方案2】:

还有一步。我没有看到门牌号码(客户购买产品后)。因此,您不会在邮件或发票中看到门牌号码。

这是在电子邮件中,但我没有看到更多详细地址:

/**
  * @hooked WC_Emails::customer_details() Shows customer details
  * @hooked WC_Emails::email_address() Shows email address
  */
 do_action( 'woocommerce_email_customer_details', $order, $sent_to_admin, $plain_text, $email );

【讨论】:

以上是关于在 Woocommerce 中显示或隐藏两个结帐字段的主要内容,如果未能解决你的问题,请参考以下文章

根据取货和交付按钮显示或隐藏 WooCommerce 结帐字段

Wordpress - 单选按钮结帐 woocommerce 显示/隐藏必填字段

根据 WooCommerce 结帐字段值显示/隐藏运输方式

根据 WooCommerce 结帐字段值显示/隐藏运输方式

根据所选付款方式显示隐藏自定义 Woocommerce 结帐字段

在 Woocommerce 中选择的运输方式更改时显示或隐藏 html 元素