仅允许在 WooCommerce 中选定工作日的时间范围内购买 [英] Only allow purchases on a time range for selected week days in WooCommerce

查看:56
本文介绍了仅允许在 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆