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

时间:2018-08-14 17:44:13

标签: php jquery wordpress woocommerce checkout

在Woocommerce结帐表单中,我试图先隐藏billing_city和billing_address_1字段,然后在填写邮政编码和门牌号字段后,其他字段(地址_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

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

更新2

您的代码中存在一些错误,错误和遗漏的东西。您还应该将其挂接到函数(或将其注册为外部文件)

我在末尾添加了一个功能,该功能在结帐(仅出于测试目的)

中添加了帐单“ housenumber”字段
  

在下面的代码中,我使用一些CSS内联样式来隐藏开票城市和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

答案 1 :(得分:0)

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

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

/**
  * @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 );