Skip to content
Advertisement

Disable add to cart button via custom checkbox in WooCommerce product settings

We want to prevent add to cart for certain upcoming products.

We want to have a checkbox to select the specific product on which we want to prevent add to cart. We have right now the checkbox and save code.

I also found this: Remove add cart button in Woocommerce for a specific product category and https://wisdmlabs.com/blog/the-right-way-to-hide-add-to-cart-button-in-woocommerce/

I’m not sure, what is the best way to prevent add to cart for specific products. Does anyone have a suggestion what the best way would be?

// Add new checkbox to product edit page (General tab)
add_action( 'woocommerce_product_options_general_product_data', 'upcoming_checkbox_to_products' );        
  
function upcoming_checkbox_to_products() {           
woocommerce_wp_checkbox( array( 
'id' => 'custom_upcoming', 
'class' => '', 
'label' => 'Prevent add to cart'
) 
);      
}
  
// -----------------------------------------
// Save checkbox via custom field
  
add_action( 'save_post', 'save_upcoming_checkbox_to_post_meta' );
  
function save_upcoming_checkbox_to_post_meta( $product_id ) {
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return;
    if ( isset( $_POST['custom_upcoming'] ) ) {
            update_post_meta( $product_id, 'custom_upcoming', $_POST['custom_upcoming'] );
    } else delete_post_meta( $product_id, 'custom_upcoming' );
}

// -----------------------------------------
// Prevent add to cart

Advertisement

Answer

  • Explanation via comment tags added in the code

To add a checkbox to the inventory product options, use:

// Add checkbox
function action_woocommerce_product_options_inventory_product_data() {
    // Checkbox
    woocommerce_wp_checkbox( array( 
        'id'             => '_prevent_add_to_cart_button', // Required, it's the meta_key for storing the value (is checked or not)
        'label'          => __( 'My label', 'woocommerce' ), // Text in the editor label
        'desc_tip'       => false, // true or false, show description directly or as tooltip
        'description'    => __( 'Prevent add to cart', 'woocommerce' ) // Provide something useful here
    ) );
}
add_action( 'woocommerce_product_options_inventory_product_data', 'action_woocommerce_product_options_inventory_product_data', 10, 0 );
        
// Save Field
function action_woocommerce_admin_process_product_object( $product ) {
    // Isset, yes or no
    $checkbox = isset( $_POST['_prevent_add_to_cart_button'] ) ? 'yes' : 'no';

    // Update meta
    $product->update_meta_data( '_prevent_add_to_cart_button', $checkbox );
}
add_action( 'woocommerce_admin_process_product_object', 'action_woocommerce_admin_process_product_object', 10, 1 );

To disable the add to cart button for simple and variable products, use:

// Is_purchasable (simple)
function filter_woocommerce_is_purchasable( $purchasable, $product ) {
    // Get meta
    $hide_add_to_cart_button = $product->get_meta( '_prevent_add_to_cart_button' );
    
    // Compare
    if ( $hide_add_to_cart_button == 'yes' ) {
        $purchasable = false;
    }

    return $purchasable;
}
add_filter( 'woocommerce_is_purchasable', 'filter_woocommerce_is_purchasable', 10, 2 );

// Is_purchasable (variable)
function filter_woocommerce_variation_is_purchasable( $purchasable, $product ) {
    $hide_add_to_cart_button = get_post_meta( $product->get_parent_id(), '_prevent_add_to_cart_button', true );

    // Compare
    if ( $hide_add_to_cart_button == 'yes' ) {
        $purchasable = false;
    }

    return $purchasable;
}
add_filter( 'woocommerce_variation_is_purchasable', 'filter_woocommerce_variation_is_purchasable', 10, 2 );

Note: There are several ways to disable/remove the add to cart button, so it depends on whether you want to hide or disable the button completely.

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement