Продавайте некоторые продукты только в определенный день в WooCommerce - PullRequest
0 голосов
/ 25 февраля 2019

С Woocommerce я хотел бы продавать определенные предметы только в воскресенье .Если кто-то пытается совершить покупку вне воскресенья, должно выдать ошибку .Оставшиеся предметы в магазине можно приобрести в любое время.

Возможно ли это?Любой трек действительно ценится.

Пример - у меня есть продукт под названием «Sunday Tapas», который является кодом продукта «2795».Я хочу, чтобы этот продукт был доступен только в воскресенье.Все остальное в магазине должно быть доступно каждый день как обычно.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Этот фрагмент кода предотвратит добавление воскресного продукта в корзину.

add_filter( 'woocommerce_variation_is_purchasable', 'restrict_products_on_sunday', 10, 2 );
add_filter( 'woocommerce_is_purchasable', 'restrict_products_on_sunday', 10, 2 );

function restrict_products_on_sunday(  $is_purchasable, $product ){
    $sunday_products = array( 'sunday_product', 'product2' ); //Give here SKUs of the product waht to sell on sundays only

    date_default_timezone_set("Asia/Bangkok"); // give here the time zone of your country
    $sku = $product->get_sku();

    $today = date('w');
    if( (int)$today==0 && in_array( $sku, $sunday_products ) ){
        return true;
    }
    return false;
}

Поскольку вы хотите, чтобы вы начали с оформления заказа, вы можете использовать приведенный ниже фрагмент кода.При оформлении заказа будет отображаться сообщение, если в корзине содержится недопустимый товар.

0 голосов
/ 25 февраля 2019

На основе " Включить покупки в магазине Woocommerce только в течение дневного диапазона времени " код ответа, изменено для обработки "дней недели" (Так что "Воскресенье" для вас) .

Следующие пункты позволят совершать покупки для определенного элемента (идентификатор продукта 2795) только по воскресеньям.

Если товар находится в корзине, но его уже нельзя купить , он автоматически удаляется (в корзине или на кассе) с сообщением об ошибке.

Снаружипо воскресеньям на странице продукта отображается сообщение об ошибке, указывающее, что продукт можно приобрести только по воскресеньям.

Вам нужно будет установить часовой пояс в первой функции и ваши конкретные продукты.во второй функции.

Код:

// Utility conditional function that check if day is sunday (returns boolean)
function is_sunday() {
    // Set Your shop time zone (http://php.net/manual/en/timezones.php)
    date_default_timezone_set('Europe/London');

    // If the current day is "sunday" return true (else retun false)
    return ( date('w') == 0 ) ? true : false;
}

// Utility function (setting your product IDS in the array)
function sunday_products() {
    // HERE your product IDs in the array (need to be coma separated)
    return array( 37 );
}

// Enable purchases for specific items on sundays only
add_filter( 'woocommerce_variation_is_purchasable', 'enable_specific_products_on_sundays', 10, 2 );
add_filter( 'woocommerce_is_purchasable', 'enable_specific_products_on_sundays', 10, 2 );
function enable_specific_products_on_sundays( $purchasable, $product ) {
    // Enable purchases for specific defined item only on sunday
    if( ! is_sunday() && in_array( $product->get_id(), sunday_products() ) )
        $purchasable = false;

    return $purchasable;
}

// Add a notice in specific products outside sundays
add_action( 'woocommerce_before_single_product', 'filter_before_single_product' );
function filter_before_single_product() {
    global $product;

    if( ! is_sunday() && in_array( $product->get_id(), sunday_products() ) ) {
        wc_print_notice( __( 'This product is only purchasable on sundays', 'woocommerce' ), 'error' );
    }
}

// IN CASE OF (but not needed): Cart and checkout validation + error message
add_action( 'woocommerce_check_cart_items', 'conditionally_allowing_checkout' );
add_action( 'woocommerce_checkout_process', 'conditionally_allowing_checkout' );
function conditionally_allowing_checkout() {
    if ( ! is_sunday() ) {
        // Loop through cart items
        foreach( WC()->cart->get_cart() as $cart_item ){
            // Check cart items
            if( in_array( $cart_item['data']->get_id(), sunday_products() ) ){
                wc_add_notice( sprintf(__("%s can be only purchase on sundays.", "woocommerce"), $cart_item['data']->get_name() ), 'error' );
                break;
            }
        }
    }
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Проверено и работает.

enter image description here

...