有条件地隐藏Woocommerce checkout 字段并使其不必填

ssm49v7z  于 2022-11-02  发布在  WordPress
关注(0)|答案(2)|浏览(211)

我有条件地取消设置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;
    }

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

oknwwptz

oknwwptz1#

两天前,我在验证消息上遇到了这个问题。我只向一个国家销售产品,所以我创建了以下解决方案。如果您要销售的国家较少,这可能也适用于您:
1.取消注解/删除

unset($fields['billing']['billing_country']);

1.转到 *WooCommerce -〉设置-〉销售到特定国家 * 并输入您的国家。
1.现在验证消息处于非活动状态,因为“国家/地区”字段是必填字段。您现在可以使用CSS将其删除。
#billing_country_field { display: none; }

pxq42qpu

pxq42qpu2#

只需更改操作名称并尝试:

add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
add_action( 'woocommerce_after_shop_loop_item_title', 'filter_default_address_fields' );

相关问题