【问题标题】:Hide Woocommerce Checkout Fields Conditionally and Make Them Not Required有条件地隐藏 Woocommerce 结帐字段并使它们不是必需的
【发布时间】:2019-06-19 10:39:55
【问题描述】:

我有条件地取消了 woocommerce 结帐页面上的帐单地址字段,但是在提交下订单时,woocommerce 显示错误:

请输入地址以继续。

然后,我尝试在 woocommerce_default_address_fields 上添加一个过滤器,以使这些字段成为可选 - 只有在未取消设置这些字段的情况下,这似乎才有效。

    // make address fields optional - this works fine without the next filter
    add_filter( 'woocommerce_default_address_fields' , 'filter_default_address_fields', 20, 1 );
    function filter_default_address_fields( $address_fields ) {
       // Only on checkout page
       if( ! is_checkout() ) return $address_fields;

       // All field keys in this array
       $fields = array('country','company','address_1','address_2','city','state','postcode');

       // Loop through each address fields (billing and shipping)
       foreach( $fields as $key_field )
           $address_fields[$key_field]['required'] = false;

       return $address_fields;
    }

    //conditionally unset fields
    add_filter( 'woocommerce_checkout_fields' , 'simplify_checkout' );

    function simplify_checkout( $fields ) {

       $customField = false;
       foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
           // Check if cart item has attribute
           if (  ! empty ($cart_item['custom_attribute']) ) $registry = true;
       }
       if( $customField ) {
           unset($fields['billing']['billing_company']);
           unset($fields['billing']['billing_address_1']);
           unset($fields['billing']['billing_address_2']);
           unset($fields['billing']['billing_city']);
           unset($fields['billing']['billing_postcode']);
           unset($fields['billing']['billing_country']);
           unset($fields['billing']['billing_state']);
       }
       return $fields;
    }

我希望仍然能够有条件地隐藏/取消设置字段以及成功的结帐提交。

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    两天前我在验证消息中遇到了这个问题。我只向一个国家销售,所以我创建了以下解决方法。如果您可以销售的国家/地区较少,也许这对您也有用:

    1. 取消注释/删除
      unset($fields['billing']['billing_country']);
    2. 转到 WooCommerce -> 设置 -> 销售到特定国家 和 输入您的国家/地区。
    3. 现在验证消息处于非活动状态,因为 Country 字段是 强制的。您现在可以使用 CSS 将其删除。

      #billing_country_field { display: none; }

    【讨论】:

      猜你喜欢
      • 2015-07-09
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 2021-02-08
      • 2017-01-13
      • 2017-07-25
      • 1970-01-01
      相关资源
      最近更新 更多