在電子商務中,靈活地管理商品的銷售時間是非常重要的。透過設置購買時間限制,您可以自動控制商品的上架和下架時間,提升銷售策略的有效性。本文將介紹如何在 WooCommerce 中自動實現商品的發布和草稿狀態切換,並確保管理員始終可以購買商品。
功能亮點
- 自動發布與草稿切換:
- 系統會根據您設定的時間,自動將商品從“發布”狀態變為“草稿”,或從“草稿”狀態恢復到“發布”狀態,無需手動操作。
- 靈活的時間管理:
- 您可以為每個商品設置開始和結束時間,使其僅在指定時間段內可購買。
- 管理員特權:
- 即使在商品被設置為草稿狀態,管理員仍然可以無時間限制地購買商品。
完整程式碼
要在 WooCommerce 中實現這些功能,您需要將以下程式碼添加到 WordPress 主題的 functions.php 文件中:
function setup_product_time_restriction() {
// 添加自訂元字段到產品編輯頁面
function add_custom_time_fields() {
global $woocommerce, $post;
echo '<div class="options_group">';
// 啟用時間限制選項
woocommerce_wp_checkbox(
array(
'id' => '_enable_time_restriction',
'label' => '啟用購買時間限制',
'description' => '勾選此項以啟用產品購買時間限制'
)
);
// 開始時間字段
woocommerce_wp_text_input(
array(
'id' => '_purchase_start_time',
'label' => '開始時間',
'placeholder' => 'YYYY-MM-DD HH:MM:SS',
'description' => '設置產品的購買開始時間,格式:YYYY-MM-DD HH:MM:SS',
'type' => 'datetime-local',
'desc_tip' => true
)
);
// 結束時間字段
woocommerce_wp_text_input(
array(
'id' => '_purchase_end_time',
'label' => '結束時間',
'placeholder' => 'YYYY-MM-DD HH:MM:SS',
'description' => '設置產品的購買結束時間,格式:YYYY-MM-DD HH:MM:SS',
'type' => 'datetime-local',
'desc_tip' => true
)
);
echo '</div>';
}
// 保存自訂字段值
function save_custom_time_fields($post_id) {
$enable_time_restriction = isset($_POST['_enable_time_restriction']) ? 'yes' : 'no';
$purchase_start_time = sanitize_text_field($_POST['_purchase_start_time']);
$purchase_end_time = sanitize_text_field($_POST['_purchase_end_time']);
update_post_meta($post_id, '_enable_time_restriction', $enable_time_restriction);
update_post_meta($post_id, '_purchase_start_time', $purchase_start_time);
update_post_meta($post_id, '_purchase_end_time', $purchase_end_time);
}
// 根據自訂字段限制產品購買,並更改產品狀態
function update_product_status_based_on_time($post_id) {
$enable_time_restriction = get_post_meta($post_id, '_enable_time_restriction', true);
$purchase_start_time = get_post_meta($post_id, '_purchase_start_time', true);
$purchase_end_time = get_post_meta($post_id, '_purchase_end_time', true);
if ($enable_time_restriction === 'yes') {
$current_time = current_time('timestamp');
$product = wc_get_product($post_id);
// 如果不在購買時間內,將產品設為草稿
if ((!empty($purchase_start_time) && $current_time < strtotime($purchase_start_time)) ||
(!empty($purchase_end_time) && $current_time > strtotime($purchase_end_time))) {
if ($product->get_status() !== 'draft') {
$product->set_status('draft');
$product->save();
}
} else {
// 在購買時間內,確保產品狀態不是草稿
if ($product->get_status() === 'draft') {
$product->set_status('publish');
$product->save();
}
}
}
}
// 檢查並更新產品狀態
function check_and_update_product_status() {
$args = array(
'post_type' => 'product',
'post_status' => array('publish', 'draft'),
'numberposts' => -1
);
$products = get_posts($args);
foreach ($products as $product) {
update_product_status_based_on_time($product->ID);
}
}
// 允許管理員在任何時間購買產品
function admin_can_always_purchase($purchasable, $product) {
if (current_user_can('administrator')) {
return true;
}
return $purchasable;
}
// 將功能掛鉤到 WooCommerce
add_action('woocommerce_product_options_general_product_data', 'add_custom_time_fields');
add_action('woocommerce_process_product_meta', 'save_custom_time_fields');
add_action('init', 'check_and_update_product_status');
add_filter('woocommerce_is_purchasable', 'admin_can_always_purchase', 10, 2);
}
// 初始化功能
setup_product_time_restriction();
使用指南
自訂字段設置:
在產品編輯頁面,您可以選擇是否啟用購買時間限制,並設置具體的開始和結束時間。
自動狀態管理:
系統會自動根據設置的時間範圍,將產品從“發布”狀態轉換為“草稿”,或從“草稿”狀態恢復為“發布”。這樣可以確保產品在正確的時間可供購買,而無需手動管理。
管理員權限:
無論產品狀態如何,管理員都可以在後台自由操作,包括購買和編輯產品。
通過這種自動化的管理方式,您可以輕鬆控制 WooCommerce 商店中的產品銷售時間,無論是進行限時促銷,還是管理庫存,這一功能都能幫助您實現更高效的業務運營。同時,對管理員的特權保護確保了您在操作上的靈活性。