Projekt starten
WordPress

Checkout in Dokan sperren, wenn ein Händler geschlossen hat

· von Daniel

Vor einigen Updates hat Dokan eine Funktion eingeführt, mit der Händler Öffnungs- und Schließzeiten für ihren Shop festlegen. Diese Funktion zeigt die Öffnungszeiten aber nur an. Wenn Sie „In den Warenkorb“ oder den Checkout sperren möchten, solange ein Händler – zum Beispiel ein Restaurant – geschlossen hat, brauchen Sie etwas eigenen Code. Der folgende Code zeigt Kunden eine Fehlermeldung, wenn sie mit Produkten eines geschlossenen Händlers bezahlen möchten. Fügen Sie ihn in die functions.php Ihres Child-Themes ein.

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

Weitere Artikel

Alle Artikel →
WordPress29. September 2025 Wie Sie den WordPress-Fehler „Der Link, dem Sie gefolgt sind, ist abgelaufen“ beheben Wenn Sie eine WordPress-Website betreiben, wird Ihnen dieser Fehler früher oder später begegnen — meist nach einem Update oder dem Einfügen eines Codeschnipsels. Manchmal tritt der… WordPress22. März 2022 Flatsome: Produktspalten pro Kategorie ändern Wenn Sie in Flatsome die Anzahl der Produktspalten pro Kategorie oder auf der Shopseite ändern möchten, verwenden Sie dieses Snippet: Allgemein22. März 2022 HTML für alle Contact-Form-7-E-Mails aktivieren Wenn Sie „HTML verwenden“ nicht für jedes Contact-Form-7-Formular einzeln aktivieren möchten, nutzen Sie dieses Code-Snippet:

Steigern wir Ihren Online-Umsatz.

Erzählen Sie uns von Ihrem Shop oder Ihrer Website. Es antwortet ein Entwickler, kein Vertrieb.

★ 4,85/5 aus 800+ Bewertungen · Envato Elite Author · Made in Germany