Hace algunas actualizaciones Dokan introduce una función para que los vendedores puedan establecer el horario de apertura y cierre de su tienda. Sin embargo, esta nueva funcionalidad no hace nada más que mostrar el horario comercial de los vendedores. Si quiere bloquear el proceso de añadir al carrito o de pago, cuando un vendedor e.g. un restaurante está cerrado, necesitará un código personalizado. El siguiente código mostrará a sus clientes un mensaje de error cuando quieran pagar con productos de un vendedor que esté cerrado. Coloque eso en sus funciones.php de su tema hijo.
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() ); } }