根据星期几安排 WooCommerce 销售价格

时间:2021-07-15 13:10:05

标签: php wordpress woocommerce

经营一家餐厅外卖网站,我想根据“星期几”创建促销产品。

周二 5 个产品 星期三 10 产品 周六6品

例如,如果星期二和产品编号打折,则应显示销售价格。 我尝试重新使用 this,但找不到有关添加销售价格的主题。

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

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

// check if day is wednesday (returns boolean)
function is_wednesday() {
    date_default_timezone_set('Europe/London');

    return ( date('w') == 3 ) ? true : false;
}

// check if day is saturday (returns boolean)
function is_saturday() {
    date_default_timezone_set('Europe/London');

    return ( date('w') == 6 ) ? true : false;
}


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

function wednesday_products() {
    return array( 38,66,42 );
}

function saturday_products() {
    return array( 321,87 );
}


// Enable sales price for specific items on conditional days only
add_filter( 'woocommerce_product_get_price', 'enable_specific_products_on_tuesday', 10, 2 );
add_filter( 'woocommerce_product_variation_get_price', 'enable_specific_products_on_tuesday', 10, 2 );
function enable_specific_products_on_tuesday( $purchasable, $product ) {
    // Enable sales price for specific defined items only on tuesday
    if( ! is_tuesday() && in_array( $product->get_id(), tuesday_products() ) )
        
    $sale_price = $product->get_sale_price();
}

1 个答案:

答案 0 :(得分:2)

我无法对此进行测试,但作为编辑价格的替代方法,这将隐藏 On Sale 消息,因为根据 WooCommerce,该产品并不是真正的促销商品。

此方法利用 WooCommerce 的现有销售功能,利用从和到的销售时间表。每天都有一个 cronjob 运行并确定当前日期,并将销售设置为从/到真正的未来,或到今天。让您可以在正常字段中不断存储销售价格,而不会一直将产品卡在销售中,WooCommerce 会直观地向客户展示销售折扣。

您必须确保在更新产品时设置销售自/至,以立即停止产品销售。

// Set Your shop time zone (http://php.net/manual/en/timezones.php)
date_default_timezone_set('Europe/London');

// Setup cron schedule
add_action('init', 'setup_schedule', 1);
function setup_schedule()
{
    if (!wp_next_scheduled('my_cron_hook')) {
        wp_schedule_event(time(), 'twicedaily', 'my_cron_hook');
    }
}

// Configure product sales on schedule
add_action('my_cron_hook', 'config_product_sales');
function config_product_sales()
{
    if (is_tuesday()) {
        addProductSale(tuesday_products());
    } else {
        removeProductSale(tuesday_products());
    }
    
    if (is_wednesday()) {
        addProductSale(wednesday_products());
    } else {
        removeProductSale(wednesday_products());
    }
    
    if (is_saturday()) {
        addProductSale(saturday_products());
    } else {
        removeProductSale(saturday_products());
    }
}

function addProductSale($products)
{
    foreach ($products as $id) {
        $product = new WC_Product($id);

        if (!$product->is_on_sale()) {
            // Set scheduled date to now
            $product->set_date_on_sale_from(time());
            $product->set_date_on_sale_to(1847300208); // Needed to stop default woo logic unsetting the sale
            $product->save();
        }
    }
}

function removeProductSale($products)
{
    foreach ($products as $id) {
        $product = new WC_Product($id);

        if ($product->is_on_sale()) {
            // Set scheduled date to far in the future, so the sale never comes on normally
            $product->set_date_on_sale_from(1847300208);
            $product->set_date_on_sale_to(1847300208);
            $product->save();
        }
    }
}

function is_tuesday() {
    return date('w') == 2 ? true : false;
}


function is_wednesday() {
    return date('w') == 3 ? true : false;
}

function is_saturday() {
    return date('w') == 6 ? true : false;
}

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

function wednesday_products() {
    // HERE your product IDs in the array (need to be coma separated)
    return array( 38,66,42 );
}

function saturday_products() {
    // HERE your product IDs in the array (need to be coma separated)
    return array( 321,87 );
}
相关问题