Home > Software design >  Why is this conditional removal of WooCommerce billing field not working?
Why is this conditional removal of WooCommerce billing field not working?

Time:02-06

I've got the following code in my functions.php file that is supposed to check if certain products are in the cart and, if they are, remove a field from the billing set of fields at checkout. However, it's not removing the field, or any other field I try. I'm wondering why that is. Other tutorials I'm following are consistent with this code and say it should work, but for me it's not. What did I get wrong?

/**
 * Check if a specific product ID is in the cart
 */
function dz_product_is_in_the_cart() {
    // Add your special product IDs here
    $ids = array( '10771', '10773', '10774', '10943', '10944', '10945', '10946', '10947', '10948', '10949', '10950', '10951', '10952', '10953', '10943', '10943', '10943', '10943');;

    // Products currently in the cart
    $cart_ids = array();

    // Find each product in the cart and add it to the $cart_ids array
    foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {
        $cart_product = $values['data'];
        $cart_ids[]   = $cart_product->id;
    }

    // If one of the special products are in the cart, return true.
    if ( ! empty( array_intersect( $ids, $cart_ids ) ) ) {
        return true;
    } else {
        return false;
    }
}
/**
 * Conditionally remove a checkout field based on products in the cart
 */
function dz_remove_checkout_field( $fields ) {
    if ( dz_product_is_in_the_cart() ) {
        unset( $fields['billing']['billing_first_name'] );
    }

    return $fields;
}
add_filter( 'woocommerce_checkout_fields' , 'dz_remove_checkout_field' );

The billing_first_name field is a required field. So do I need to do something to unrequire it before I try to unset it?

CodePudding user response:

The problem was a plugin that was inserting this field was overriding my code that tried to unrequire and remove it. I opted to disable the plugin and add and conditionally control my own field(s) with the code here: https://woocommerce.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/#section-7

  •  Tags:  
  • Related