使用 PHP 記錄 WooCommerce 訂單更新資料結構

在開發基於 WordPress 的 WooCommerce 網站時,了解訂單資料結構對於客製化功能至關重要。例如,在訂單更新的過程中,我們可能需要深入分析訂單的詳細資訊,這時候將資料記錄為 JSON 格式是一個方便的解決方案。

在本文中,我將分享如何使用 PHP 函數,透過 WooCommerce 的鉤子(hook),將訂單更新時的資料結構記錄到檔案中。


需求情境

在 WooCommerce 中,當訂單的狀態或詳細資料更新時,我們需要:

  1. 監聽訂單更新事件。

  2. 獲取訂單的完整詳細資料。

  3. 將這些資料儲存為 JSON 格式,以便於後續分析或除錯。


解決方案

以下是完整的解決方案,透過 WooCommerce 的 woocommerce_order_status_changed 鉤子,記錄訂單的詳細資料結構。

add_action('woocommerce_order_status_changed', 'log_order_data', 10, 4);

function log_order_data($order_id, $old_status, $new_status, $order) {
    $data = [
        'order_id' => $order_id,
        'old_status' => $old_status,
        'new_status' => $new_status,
        'order_data' => $order->get_data() // 獲取訂單詳細資料
    ];

    write_to_log_file($data, 'order_update_log.json');
}

function write_to_log_file($data, $filename = 'meta_data.json') {
    $log_dir = __DIR__ . '/logs'; // 指定記錄檔存放目錄
    if (!file_exists($log_dir)) {
        mkdir($log_dir, 0755, true); // 如果目錄不存在,創建目錄
    }
    $log_file = $log_dir . '/' . $filename;

    // 將資料轉換為 JSON 格式
    $json_data = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

    // 將 JSON 資料寫入文件(直接覆寫內容)
    file_put_contents($log_file, $json_data);
}

程式碼解說

  1. 監聽訂單狀態更新事件
    使用 WooCommerce 的 woocommerce_order_status_changed 鉤子,在訂單狀態變更時觸發 log_order_data 函數。

    add_action('woocommerce_order_status_changed', 'log_order_data', 10, 4);
  2. 獲取訂單詳細資料
    通過 WC_Orderget_data() 方法獲取完整的訂單資料,包含客戶資訊、商品清單、付款方式等細節。

    'order_data' => $order->get_data()
  3. 記錄資料至 JSON 檔案
    將資料轉換為 JSON 格式,並寫入 logs 目錄下的檔案中。

    write_to_log_file($data, 'order_update_log.json');

範例輸出

假設有一筆訂單,其狀態從 processing 更新為 completed,以下是記錄下來的 JSON 資料範例:

{
    "order_id": 1234,
    "old_status": "processing",
    "new_status": "completed",
    "order_data": {
        "id": 1234,
        "status": "completed",
        "currency": "USD",
        "total": "99.99",
        "customer_id": 5678,
        "billing": {
            "first_name": "John",
            "last_name": "Doe",
            "email": "[email protected]"
        },
        "line_items": [
            {
                "name": "T-Shirt",
                "quantity": 2,
                "total": "49.99"
            }
        ]
    }
}

適用場景

  • 除錯需求:快速了解 WooCommerce 訂單資料結構,定位問題。

  • 數據分析:將記錄的 JSON 資料用於訂單數據分析。

  • 客製化功能開發:根據訂單詳細資料設計特定邏輯。


結語

透過這種方法,我們可以輕鬆地記錄 WooCommerce 訂單的詳細資料,為後續開發提供便利。

 

發佈留言