phpwordpresswoocommerceproductcheckout

Require registration in WooCommerce for specific product


It's straightforward to required registration globally in WooCommerce settings but for most of the products we sell, it's not necessary and I would rather restrict the logged in users.

However for one product I would like to require registration.

Something like

$product_id = $product->get_id();

if ($product_id !== 1024) {

  remove_action( 'woocommerce_before_checkout_registration_form', 'action_woocommerce_checkout_registration_form', 10, 1 );

}

but it's obviously not that simple. Any ideas?


Solution

  • This answer assumes that WooCommerce > Settings > Accounts & privacy > Allow customers to place orders without an account is enabled

    You can then use the following code, that will ensure that when there is 1 or more productID's in the shopping cart, registration during checkout will be required

    function filter_woocommerce_checkout_registration_required( $bool_value ) {
        // Several can be added, separated by a comma
        $product_ids = array ( 30, 813 );
        
        // Loop through cart items
        foreach ( WC()->cart->get_cart() as $cart_item ) {
            // Product ID from cart item in specific array
            if ( in_array( $cart_item['product_id'], $product_ids ) ) {
                // Registration_required
                $bool_value = true;
                        
                // Break loop
                break;
            }
        }
    
        return $bool_value;
    }
    add_filter( 'woocommerce_checkout_registration_required', 'filter_woocommerce_checkout_registration_required', 10, 1 );