Trong môi trường kinh doanh trực tuyến ngày nay, việc quản lý đơn hàng hiệu quả là điều tối quan trọng để duy trì sự hài lòng của khách hàng và tối ưu hóa quy trình làm việc. Một trong những cách để cải thiện quy trình này là tự động hủy các đơn hàng không được xử lý trong một khoảng thời gian nhất định. Bài viết này sẽ hướng dẫn bạn cách cài đặt và sử dụng chức năng tự động hủy đơn hàng trong WooCommerce, đồng thời gửi thông báo đến Telegram để cập nhật tình trạng đơn hàng.
Để bắt đầu, bạn cần tạo một trang cài đặt trong khu vực quản lý của WooCommerce. Đoạn mã dưới đây sẽ thêm trang cài đặt vào menu admin.
// Thêm trang cài đặt vào menu admin
function custom_order_cancel_settings_page() {
add_menu_page(
'Cài Đặt Thời Gian Đơn Hàng Tự Hủy', // Tiêu đề trang
'Đơn Hàng Tự Hủy', // Tiêu đề menu
'manage_options', // Quyền truy cập
'order-auto-cancel', // Slug
'render_order_cancel_settings', // Hàm hiển thị
'dashicons-admin-generic' // Biểu tượng
);
}
add_action('admin_menu', 'custom_order_cancel_settings_page');
Chúng ta cần một biểu mẫu để nhập số ngày đơn hàng sẽ được tự động hủy, cùng với thông tin ID chat và token Telegram.
// Hàm hiển thị trang cài đặt
function render_order_cancel_settings() {
// Kiểm tra quyền truy cập
if (!current_user_can('manage_options')) {
return;
}
// Lấy giá trị hiện tại từ options
$days_to_cancel = get_option('days_to_cancel', 3);
$telegram_chatid = get_option('telegram_chatid', '');
$telegram_token = get_option('telegram_token', '');
// Xử lý khi người dùng gửi biểu mẫu
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Cập nhật thông tin cài đặt
$days_to_cancel = intval($_POST['days_to_cancel']);
$telegram_chatid = sanitize_text_field($_POST['telegram_chatid']);
$telegram_token = sanitize_text_field($_POST['telegram_token']);
// Lưu lại
update_option('days_to_cancel', $days_to_cancel);
update_option('telegram_chatid', $telegram_chatid);
update_option('telegram_token', $telegram_token);
echo '<div class="updated"><p>Cài đặt đã được lưu!</p></div>';
}
// Hiển thị biểu mẫu
?>
<div class="wrap">
<h1>Cài Đặt Thời Gian Đơn Hàng Tự Hủy</h1>
<p>Cài đặt thời gian đơn hàng tự động chuyển từ trạng thái đang xử lý sang hủy.</p>
<form method="post" action="">
<table class="form-table">
<tr valign="top">
<th scope="row">Số ngày</th>
<td><input type="number" name="days_to_cancel" value="<?php echo esc_attr($days_to_cancel); ?>" required /></td>
</tr>
<tr valign="top">
<th scope="row">ID Chat Telegram</th>
<td><input type="text" name="telegram_chatid" value="<?php echo esc_attr($telegram_chatid); ?>" required /></td>
</tr>
<tr valign="top">
<th scope="row">Token Telegram</th>
<td><input type="text" name="telegram_token" value="<?php echo esc_attr($telegram_token); ?>" required /></td>
</tr>
</table>
<p class="submit">
<input type="submit" class="button-primary" value="Lưu cài đặt" />
</p>
</form>
</div>
<?php
}
Để tự động hủy đơn hàng, bạn cần một hàm thực hiện việc này. Hàm dưới đây sẽ tự động kiểm tra và hủy các đơn hàng đang xử lý đã quá thời gian quy định.
// Hàm tự động hủy đơn hàng
function auto_cancel_processing_orders() {
// Lấy giá trị từ options
$days_to_cancel = get_option('days_to_cancel', 3); // Mặc định là 3 ngày
// Lấy thời gian hiện tại
$current_time = current_time('timestamp');
// Lấy tất cả đơn hàng đang xử lý
$args = array(
'status' => 'wc-processing',
'date_created' => '<' . ( $current_time - ( $days_to_cancel * DAY_IN_SECONDS ) ),
'limit' => -1, // Lấy tất cả đơn hàng
);
$orders = wc_get_orders($args);
foreach ($orders as $order) {
// Chuyển trạng thái đơn hàng sang hủy
$order->update_status('cancelled', __('Đơn hàng đã tự động hủy sau ' . $days_to_cancel . ' ngày.', 'your-text-domain'));
// Gửi thông báo đến Telegram
$telegram_chatid = get_option('telegram_chatid');
$telegram_token = get_option('telegram_token');
$message = "Đơn hàng #" . $order->get_id() . " đã tự động hủy sau " . $days_to_cancel . " ngày.";
if ($telegram_chatid && $telegram_token) {
$telegram_url = "https://api.telegram.org/bot" . $telegram_token . "/sendMessage";
$params = array(
'chat_id' => $telegram_chatid,
'text' => $message,
'parse_mode' => 'HTML'
);
// Gửi yêu cầu đến Telegram
wp_remote_post($telegram_url, array('body' => $params));
}
}
}
Cuối cùng, bạn cần thiết lập một cron job để hàm tự động hủy này chạy hàng ngày.
// Thiết lập cron job để chạy hàng ngày
if (!wp_next_scheduled('auto_cancel_processing_orders_event')) {
wp_schedule_event(time(), 'daily', 'auto_cancel_processing_orders_event');
}
// Thêm hàm vào hook 'woocommerce_order_status_changed' để chạy hàng ngày
add_action('auto_cancel_processing_orders_event', 'auto_cancel_processing_orders');
Việc cài đặt chức năng tự động hủy đơn hàng không chỉ giúp bạn tiết kiệm thời gian mà còn nâng cao hiệu quả quản lý đơn hàng. Với việc thông báo đến Telegram, bạn sẽ luôn cập nhật được tình trạng đơn hàng một cách kịp thời. Hãy thử nghiệm ngay tính năng này và cảm nhận sự khác biệt trong quy trình làm việc của bạn!
Bài viết này hy vọng sẽ giúp bạn hiểu rõ hơn về cách cài đặt và lợi ích của tính năng tự động hủy đơn hàng trong WooCommerce.