Some updates ago Dokan introduces a feature for vendors to set opening and closing hours for their store. However this new functionality does nothing than showing vendors business hours. If you want to block the add to cart or checkout process, when a vendor e.g. a restaurant is closed, you will need some custom code. Below code will show your customers an error message when they want to checkout with products from a vendor who is closed. Place that int your functions.php of your child theme.
add_action( 'woocommerce_checkout_process', 'check_shop_open' ); add_action( 'woocommerce_check_cart_items' , 'check_shop_open' ); function check_shop_open() { $vendorId = false; // Set vendor ID based on cart items $cartItems = WC()->cart->get_cart(); foreach ( $cartItems as $cartItemKey => $cartItem ) { $vendorId = get_post_field( 'post_author', $cartItem['product_id'] ); $vendorInfo = dokan_get_store_info( $vendorId ); } if(!$vendorId) { return; } if(empty($vendorInfo)) { return; } if(!isset($vendorInfo['dokan_store_time']) || empty($vendorInfo['dokan_store_time']) ) { return; } // Get All Vendor Opening Hours $wpTimezone = wp_timezone(); $vendorName = $vendorInfo['store_name']; $storeOpeningHours = $vendorInfo['dokan_store_time']; $dateFormat = 'd.m.Y'; $currentDate = DateTime::createFromFormat($dateFormat, date($dateFormat), $wpTimezone); $currentDay = strtolower( $currentDate->format('l') ); if(!isset($storeOpeningHours[$currentDay]) || empty($storeOpeningHours[$currentDay])) { return; } // Set current Day Vendor Opening Hours $storeOpeningHoursCurrentDay = $storeOpeningHours[$currentDay]; // Store Closed Today if(isset($storeOpeningHoursCurrentDay['status']) && $storeOpeningHoursCurrentDay['status'] == "close") { show_cart_checkout_message( sprintf( __('Oh sorry. %s is closed today! Please return another day.', 'flatsome-child'), $vendorName ) ); return false; } // Store not open if(isset($storeOpeningHoursCurrentDay['opening_time']) && !empty($storeOpeningHoursCurrentDay['opening_time'])) { $storeOpeningHoursCurrentDayOpeningTime = $storeOpeningHoursCurrentDay['opening_time']; $storeOpeningHoursCurrentDayOpeningTimeObject = DateTime::createFromFormat('H:i', $storeOpeningHoursCurrentDayOpeningTime, $wpTimezone); if($currentDate <= $storeOpeningHoursCurrentDayOpeningTimeObject) { show_cart_checkout_message( sprintf( __('Oh sorry! %s opens at %s o\'clock. Please return another day.', 'flatsome-child'), $vendorName, $storeOpeningHoursCurrentDayOpeningTime) ); return false; } } // Store closed time if(isset($storeOpeningHoursCurrentDay['closing_time']) && !empty($storeOpeningHoursCurrentDay['closing_time'])) { $storeClosingHoursCurrentDayClosingTime = $storeOpeningHoursCurrentDay['closing_time']; $storeClosingHoursCurrentDayClosingTimeObject = DateTime::createFromFormat('H:i', $storeClosingHoursCurrentDayClosingTime, $wpTimezone); if($currentDate >= $storeClosingHoursCurrentDayClosingTimeObject) { show_cart_checkout_message( sprintf( __('Oh sorry! %s is closed since %s o\'clock. Please return another day.', 'flatsome-child'), $vendorName, $storeClosingHoursCurrentDayClosingTime) ); return false; } } } // Show a custom WC error mesagge (cart + checkout) function show_cart_checkout_message($message) { if(empty($message)) { return; } if( is_cart() ) { wc_print_notice( $message, 'error' ); } else { wc_add_notice( $message, 'error' ); wp_redirect( wc_get_cart_url() ); } }