首页 文章

根据所选国家/地区制作不需要的woocommerce结帐表单状态字段

提问于
浏览
2

我有一个WordPress Woo-commerce网站,我想根据所选国家/地区在结帐表单上选择州字段 . 例如,我希望我的客户只有在属于美国某州时才添加州字段 .

我该怎么做呢?

3 回答

  • 3
    add_filter( 'woocommerce_default_address_fields' , 'custom_override_state_required' );
    function custom_override_state_required( $address_fields ) {
      $wc = WC();
      $country = $wc->customer->get_country();
      if($country !== 'US'){
         $address_fields['state']['required'] = false;
      }
      return $address_fields;
    }
    

    这是适合我的代码 . 我发布这个答案而没有编辑@zipkundan答案,因为我没有看到他的答案有任何错误,但不知何故它不适合我 . 这可能是因为WooCommerce版本或可能有其他原因!!如果有人有类似要求,我建议尝试两种答案 .

  • 2

    试试这个(在你的functions.php中)

    add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fields' );
    function custom_override_default_address_fields( $address_fields ) {
         global $woocommerce;
         $country = $woocommerce->customer->get_country();
         if($country !== 'US'){
            $address_fields['state']['required'] = false;
         }
         return $address_fields;
    }
    

    当访客不是来自美国时,这将使'state'字段成为可选字段 .
    希望这可以帮助 .

    UPDATE

    add_filter( 'woocommerce_checkout_fields', 'custom_override_default_address_fields' );
    function custom_override_default_address_fields($fields){
        global $woocommerce;
        $country = $woocommerce->customer->get_country();
        if($country !== 'US'){
            $fields['billing']['state']['required'] = false;
            $fields['shipping']['state']['required'] = false;
        }
        return $fields;
    }
    
  • 1

    万一有人偶然发现了这一点,Woocommerce改变了州域的名称 . 以下是更新的解决方案:

    add_filter( 'woocommerce_checkout_fields','custom_override_default_address_fields' );
    
    function custom_override_default_address_fields($fields){
        global $woocommerce;
        $country = $woocommerce->customer->get_country();
    
        if($country !== 'US'){
            $fields['billing']['billing_state']['required'] = false;
            $fields['shipping']['shipping_state']['required'] = false;
        }
    
        return $fields;
    }
    

相关问题