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