【问题标题】:Making woocommerce checkout form state field not required based on selected country根据所选国家/地区制作不需要 woocommerce 结帐表单状态字段
【发布时间】:2016-04-09 07:57:33
【问题描述】:

我有一个 WordPress+Woo 商务网站,我想根据所选国家/地区将结帐表单上的状态字段设为可选。例如,我希望我的客户仅在他们属于美国某个州时才添加州字段。

我该怎么做?

【问题讨论】:

  • 你尝试过什么了吗?
  • 是但不具体!我不确定如何获得所选国家/地区。可能我需要添加 jQuery 来检测所选国家/地区,然后需要使用 AJAX 做一些魔术。我不确定是否有一些过滤器或动作钩子可以做到这一点。

标签: wordpress woocommerce


【解决方案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;
}

【讨论】:

    【解决方案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;
    }
    

    当访客不是来自美国时,这将使“州”字段成为可选字段。
    希望这会有所帮助。

    更新

    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;
    }
    

    【讨论】:

    • 当客户选择运送到“帐单地址”但不使用我的设置“运送到送货地址”时它可以工作。知道它为什么会这样。
    • 在进一步测试中,我发现这仅在帐单国家/地区选择为美国时才有效,并且在运输国家/地区选择什么都没有关系。
    • 那么,您希望这适用于帐单地址和送货地址吗?
    • @Rituparna Sonowal > 我已经发布了更新的功能。这使得“状态”字段在计费和运输表单中都是可选的。检查它是否适合您并告诉我。
    【解决方案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 版本或可能有其他原因!如果有人有类似的要求,我建议尝试这两个答案。

    【讨论】:

      【解决方案4】:

      在我意识到还有来自 WC_Countries 的 woocommerce_get_country_locale 钩子之前,我很难获得其他答案。通过前端的 javascript 根据所选国家/地区设置所需的状态。

      add_filter('woocommerce_get_country_locale', 'update_country_locales', 10 , 1);
      
      function update_country_locales($countries) {
      
          foreach ($countries as $country => $fields) {
              if (isset($fields['state']) && $country != 'US') {
                  $countries[$country]['state']['required'] = false;
              }
          }
      
          return $countries;
      }
      

      【讨论】:

        猜你喜欢
        • 2021-10-27
        • 2021-11-22
        • 2020-09-15
        • 2021-03-24
        • 2016-01-01
        • 2019-04-07
        • 2019-08-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多