经营一家餐厅外卖网站,我想根据“星期几”创建促销产品。
周二 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();
}
答案 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 );
}