仅允许在 WooCommerce 中选定工作日的时间范围内购买 [英] Only allow purchases on a time range for selected week days in WooCommerce
问题描述
对于非营利组织,我需要创建一个函数,首先检查时间,如果时间在范围内,则检查今天是哪一天.他们只允许在给定时间内的星期二
、星期四
和星期六
购买.
For a non profit, I need to create a function that first checks the time and if the time is within range, check what day it is. They only allow purchases on Tuesdays
, Thursdays
and Saturdays
within the given time.
我尝试了很多东西,Woocommerce 中基于时间的启用/禁用添加到购物车 答案启发了我下面的代码:
I've tried many things and Time based Enable/Disable Add to Cart in Woocommerce answer has inspired my code below:
function opening_hours() {
date_default_timezone_set('Europe/Paris');
$opening_time = mktime('10', '00', '00', date('m'), date('d'), date('Y'));
$closing_time = mktime('17', '00', '00', date('m'), date('d'), date('Y'));
$now = time();
return ($now >= $opening_time && $now <= $closing_time) ? true : false;
}
add_filter( 'woocommerce_variation_is_purchasable', 'disable_purchases_on_closed_days', 10, 2 );
add_filter( 'woocommerce_is_purchasable', 'disable_purchases_on_closed_days', 10, 2 );
function disable_purchases_on_closed_days( $purchasable, $product ) {
// check if the time is correct for opening hours
if ( opening_hours() ) {
// if the time is right, make sure it is one of the correct days (tuesday, thursday or saturday)
if (date('N') != 2 || date('N') != 4 || date('N') != 6){
// if not the correct day, disable purchase
$purchasable = false;
return $purchasable;
}
}
}
add_action( 'woocommerce_check_cart_items', 'cart_and_checkout_opening_hours' );
add_action( 'woocommerce_checkout_process', 'cart_and_checkout_opening_hours' );
function cart_and_checkout_opening_hours() {
if ( ! opening_hours() ) {
wc_add_notice( __("The online store is currently closed. You can view products, but purchases are not allowed."), 'error' );
}
}
add_action( 'template_redirect', 'shop_is_closed_notice' );
function shop_is_closed_notice(){
if ( ! ( is_cart() || is_checkout() ) && !opening_hours() ) {
$message = esc_html__('The online store is currently closed. You can view products, but purchases are allowed between x-x.', 'woocommerce' );
wc_add_notice( '<span class="shop-closed">' . $message . '</span>', 'notice' );
}
}
但由于某种原因,我无法让它发挥作用.我没有收到任何错误和通知,无论我做什么,所有产品都是不可购买的.
But for some reason, I cannot get this to work. I get no errors and no notices and no matter what I do, all products are non purchasable.
也许有人可以查看代码并提供一些见解?
推荐答案
您的代码中存在一些错误和复杂情况.尝试以下重新访问的代码:
There are some mistakes and complications in your code. Try the following revisited code:
// Custom conditional function
function is_shop_open() {
date_default_timezone_set('Europe/Paris');
$start_time = mktime('10', '00', '00', date('m'), date('d'), date('Y')); // 10h
$end_time = mktime('17', '00', '00', date('m'), date('d'), date('Y')); // 17h
$now_time = time();
$allowed_days = in_array( date('N'), array(2, 4, 6) ); // tuesdays, thursdays and saturdays
return $allowed_days && $now_time >= $start_time && $now_time <= $end_time ? true : false;
}
add_filter( 'woocommerce_variation_is_purchasable', 'shop_closed_disable_purchases' );
add_filter( 'woocommerce_is_purchasable', 'shop_closed_disable_purchases' );
function shop_closed_disable_purchases( $purchasable ) {
return is_shop_open() ? $purchasable : false;
}
add_action( 'woocommerce_check_cart_items', 'shop_open_allow_checkout' );
add_action( 'woocommerce_checkout_process', 'shop_open_allow_checkout' );
function shop_open_allow_checkout() {
if ( ! is_shop_open() ) {
wc_add_notice( __("The online store is currently closed. You can view products, but purchases are not allowed."), 'error' );
}
}
add_action( 'template_redirect', 'shop_is_closed_notice' );
function shop_is_closed_notice(){
if ( ! ( is_cart() || is_checkout() ) && ! is_shop_open() ) {
wc_add_notice( sprintf( '<span class="shop-closed">%s</span>',
esc_html__('The online store is currently closed. You can view products. But purchases are allowed between x-x.', 'woocommerce' )
), 'notice' );
}
}
代码位于活动子主题(或活动主题)的 function.php 文件中.经测试有效.
Code goes in function.php file of your active child theme (or active theme). Tested and works.
这篇关于仅允许在 WooCommerce 中选定工作日的时间范围内购买的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!