【问题标题】:Hide checkout fields based on selected country Woocommerce根据所选国家/地区隐藏结帐字段 Woocommerce
【发布时间】:2021-10-27 12:06:47
【问题描述】:

如果送货地址设置为某个国家/地区(约旦),我希望隐藏几个结帐字段, 它们是街道地址和邮政编码...

我该怎么做?

【问题讨论】:

  • 欢迎来到 Stackoverflow!,不幸的是,这个问题有点太模糊了,它非常笼统地询问构成教程的内容,而不是询问具体问题。因此它不适合 stackoverflow,因为 Stackoverflow 不是教程提供者。提问者应创建minimal reproducible example 并向我们展示他们面临的问题。请查看How to ask 部分以获取有关提出非常适合该站点的问题的提示。祝你好运
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: woocommerce checkout shipping


【解决方案1】:

在functions.php上试试这个:

add_action( 'woocommerce_after_checkout_form', 'woo_conditionally_hide_show_checkout_field', 9999 );

function woo_conditionally_hide_show_checkout_field() {
wc_enqueue_js( "
    // On page load
    jQuery(document).ready(function() {
        // var country_code = jQuery(this).val();
        var country_name = jQuery('#billing_country option:selected').text().toLowerCase();
        show_hide_fields(country_name);
    });

    // On change country dropdown
    jQuery(document).on('change','#billing_country',function() {
        var country_name = jQuery('option:selected',this).text().toLowerCase();
        show_hide_fields(country_name);
    });

    function show_hide_fields(country){
        if (country == 'jordan') {
            jQuery('#billing_address_1_field').hide();
            jQuery('#billing_address_2_field').hide();
            jQuery('#billing_postcode_field').hide();
        } else {
            jQuery('#billing_address_1_field').show();
            jQuery('#billing_address_2_field').show();
            jQuery('#billing_postcode_field').show();
        }
    }
");
}

删除必需的验证:(如果需要 - 您可以相应地更改字段值)

add_filter( 'woocommerce_default_address_fields' , 'woo_disable_address_fields_validation' );

function woo_disable_address_fields_validation( $address_fields_array ) {

   unset( $address_fields_array['state']['validate']);
   unset( $address_fields_array['postcode']['validate']);
   // you can also hook first_name and last_name, company, country, city, address_1 and address_2

   return $address_fields_array;

}

现在在您的活动主题functions.php上复制过去的两个功能 您还可以相应地管理显示/隐藏字段,还可以根据需要使用 country_code。

【讨论】:

  • 非常感谢您。它工作得很好,除了默认情况下需要这些字段并且需要将它们设置为可选。我试图寻找代码来做到这一点,但我无法弄清楚!
  • 对特定字段的未设置验证太容易使用 - 请参阅(参考 URL - rudrastyh.com/woocommerce/checkout-fields.html
  • 示例 - add_filter( 'woocommerce_default_address_fields' , 'misha_disable_address_fields_validation' );功能 misha_disable_address_fields_validation( $address_fields_array ) { unset( $address_fields_array['state']['validate']);未设置($address_fields_array['postcode']['validate']); // 也可以 hook first_name 和 last_name, company, country, city, address_1 和 address_2 return $address_fields_array; }
  • 感谢您的链接!它真的很有用。但是很抱歉我不清楚,我想将这两个功能结合起来。我的意思是,只有在选择JORDAN但是保留其他国家时,才希望隐藏状态和邮政编码。我不确定如何将您编写的原始代码与隐藏字段集成在一起。 (原代码只是隐藏了它们,但它们仍然是必需的,新代码对所有国家都隐藏了它们也是不正确的)
  • 现在我已经更新了我的答案,这样你就可以很容易地理解我在说什么。
猜你喜欢
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 2019-08-07
  • 2020-09-15
  • 2018-09-14
  • 1970-01-01
  • 2015-04-09
相关资源
最近更新 更多