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