Tự động hủy đơn hàng đang xử lý trong WooCommerce theo số ngày cài đặt và gửi thông báo tới Telegram

31 Tháng mười, 2024

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.

1. Lợi Ích Của Tính Năng Tự Động Hủy Đơn Hàng

  • Giảm Tải Công Việc: Thay vì phải kiểm tra và hủy từng đơn hàng một cách thủ công, tính năng này sẽ tự động xử lý các đơn hàng không còn khả năng thực hiện.
  • Cải Thiện Trải Nghiệm Khách Hàng: Bằng cách tự động hủy các đơn hàng chưa được xử lý, bạn có thể cung cấp trải nghiệm mua sắm tốt hơn cho khách hàng, giúp họ dễ dàng đặt lại hàng hóa.
  • Giảm Thiểu Rủi Ro Tài Chính: Việc hủy các đơn hàng không được xử lý trong thời gian quy định giúp bạn giảm thiểu nguy cơ tài chính từ những đơn hàng không thể hoàn thành.

2. Cài Đặt Tính Năng Tự Động Hủy Đơn Hàng

Thêm Trang Cài Đặt vào Admin

Để 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');

Tạo Biểu Mẫu Cài Đặt

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

Để 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));
        }
    }
}

Thiết Lập Cron Job

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');

3. Kết Luận

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.

Quảng Cáo

Blog ..

Hướng dẫn dịch vụ ..

Zalo
Proxy
VPS
Tài khoản
Hosting
Tên miền
Facebook