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.