Forum Replies Created

Viewing 1 replies (of 1 total)
  • Use this code

        /*
        Plugin Name: Remove 'Add to cart' conditionally
        Plugin URI:  https://www.damiencarbery.com/2020/03/remove-add-to-cart-conditionally/
        Description: Conditionally remove the 'Add to cart' button in WooCommerce.
        Author: Damien Carbery
        Version: 0.2
        */
        
        
        class IsPurchasableConditionalFiltering {
        	// A reference to an instance of this class.
        	private static $instance;
        	// Store whether 'Add to cart' button should be displayed.
        	private $purchasable;
        
        
        	// Returns an instance of this class. 
        	public static function get_instance() {
        		if ( null == self::$instance ) {
        			self::$instance = new IsPurchasableConditionalFiltering;
        		}
        		return self::$instance;
        	}
        
        
        	// Initialize the plugin variables.
        	public function __construct() {
        		$this->purchasable = array();
        
        		$this->init();
        	}
        
        
        	// Set up WordPress specfic actions.
        	public function init() {
        		add_filter( 'woocommerce_is_purchasable', array( $this, 'is_purchasable_conditionals' ), 10, 2 );
        		add_filter( 'woocommerce_variation_is_purchasable', array( $this, 'variation_is_purchasable_conditionals' ), 10, 2 );
        		
        		// Remove variations dropdown and 'Add to cart' button for variable products.
        		add_action( 'woocommerce_before_single_product_summary', array( $this, 'before_single_product_summary' ) );
        	}
        	
        	
        	public function is_purchasable_conditionals( $whether_purchasable, $product ) {
        		// Return cached result.
        		if ( array_key_exists( $product->get_id(), $this->purchasable ) ) {
        			return $this->purchasable[ $product->get_id() ];
        		}
        		
        		// Only do our conditional checks if WooCommerce deems the item to be purchasable.
        		if ( $whether_purchasable ) {
        			$result = true;  // Default to allowing purchase.
        			
        			// Check our specific conditions - some examples.
        			/* // Product over a certain price.
        			if ( $product->get_price() > 2 ) {
        				$result = false;
        			}*/
        			
        			// Check if product in a certain categores.
        			if ( has_term( array( 'hoodies', 'accessories' ), 'product_cat', $product->get_id() ) ) {
        				$result = false;
        			}
        			
        			
        			$this->purchasable[ $product->get_id() ] = $result;
        		}
        		else {
        			// Store that this item cannot be purchased.
        			$this->purchasable[ $product->get_id() ] = false;
        		}
        
        		return $this->purchasable[ $product->get_id() ];
        	}
        	
        	
        	public function variation_is_purchasable_conditionals( $whether_purchasable, $product ) {
        		return $whether_purchasable;
        	}
        	
        	
        	public function before_single_product_summary() {
        		$product_id = get_the_ID();
        		if ( array_key_exists( $product_id, $this->purchasable ) && !$this->purchasable[ $product_id ] ) {
        			remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );
        			remove_action( 'woocommerce_variable_add_to_cart', 'woocommerce_variable_add_to_cart', 30 ); 
        		}
        	}
        }
        $IsPurchasableConditionalFiltering = new IsPurchasableConditionalFiltering;

    Reference : https://www.damiencarbery.com/2020/03/remove-add-to-cart-button-conditionally/

    • This reply was modified 4 years, 6 months ago by ajanthalakmal.
Viewing 1 replies (of 1 total)