Project starten

Afrekenen blokkeren in Dokan als een verkoper gesloten is

· door Daniel

Een paar updates geleden introduceerde Dokan een functie waarmee verkopers openings- en sluitingstijden voor hun winkel instellen. Die functie toont echter alleen de openingstijden. Wil je het toevoegen aan de winkelwagen of het afrekenen blokkeren als een verkoper, bijvoorbeeld een restaurant, gesloten is, dan heb je eigen code nodig. De code hieronder toont klanten een foutmelding als ze willen afrekenen met producten van een gesloten verkoper. Zet hem in de functions.php van je childthema.

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() );
    }
}

Meer artikelen

Alle artikelen →
Blog29 oktober 2026 EmpCo-richtlijn: wat webshops sinds 27 september 2026 moeten weten over milieuclaims ‘Duurzaam’, ‘klimaatneutrale verzending’, ‘milieuvriendelijke verpakking’: zulke claims staan in veel webshops, in productteksten, banners, badges in de footer of in plugins voor C… Blog29 oktober 2026 EU AI Act: wat de AI-verordening betekent voor websites en webshops Sinds 2 augustus 2026 gelden de transparantieverplichtingen van de Europese AI-verordening, de EU AI Act. Gebruik je een AI-chatbot op je website, maak je beelden met AI of laat je… Blog22 december 2023 Voorkomen dat WP Rocket gefilterde WooCommerce-pagina’s cachet Gebruik je WP Rocket met preloading samen met een filterplugin zoals Filter Everything Pro, dan kunnen je database EN je cachemap exploderen. We hadden een site met maar zo’n 2000 …

Laten we je online verkoop verhogen.

Vertel ons over je webshop of website. Een ontwikkelaar antwoordt, geen salesteam.

★ 4,85/5 uit 800+ beoordelingen · Envato Elite Author · Made in Germany