Hướng dẫn lập trình và kỹ thuật thực hành xử lý hàng loạt dữ liệu sản phẩm trên website WooCommerce

Đọc trong 3 phút
2026-03-12
2026-06-03
2,353
Tôi kiếm được hoa hồng khi bạn mua sắm thông qua các liên kết dưới đây, mà không phát sinh thêm chi phí nào cho bạn.

Khi quản lý nhiều cửa hàng WooCommerce trên quy mô lớn, việc chỉnh sửa thông tin sản phẩm một cách thủ công qua giao diện backend là một công việc tốn nhiều thời gian và dễ gây ra lỗi. Trong trường hợp này, việc thành thạo các kỹ thuật lập trình để thực hiện các thao tác xử lý hàng loạt trở thành kỹ năng then chốt giúp nâng cao hiệu quả phát triển và vận hành. Bài viết này sẽ tìm hiểu sâu rộng về một số phương pháp lập trình cơ bản, từ API gốc đến các script tùy chỉnh, đồng thời cung cấp những mẹo và lưu ý quan trọng trong thực tế.

Các phương pháp và công cụ cốt lõi để xử lý dữ liệu hàng loạt trong WooCommerce

WooCommerce cung cấp nhiều phương thức cho phép các nhà phát triển thao tác với dữ liệu sản phẩm thông qua lập trình. Việc lựa chọn phương thức nào phụ thuộc vào loại thao tác cụ thể, lượng dữ liệu và yêu cầu về hiệu suất thực thi cũng như tính bảo mật.

Sử dụng giao diện REST API gốc của WooCommerce

WooCommerce REST API là một giải pháp tiêu chuẩn hóa cho các thao tác từ xa, đa hệ thống và theo lô (batch operations). Dựa trên giao thức HTTP, nó cho phép bạn sử dụng nó để thực hiện các lệnh trên hệ thống quản lý nội dung thương mại điện tử (e-commerce) của WooCommerce một cách dễ dàng và hiệu quả.POSTPUTPATCHDELETECác phương pháp như vậy được sử dụng để thực hiện các thao tác thêm, xóa, sửa đổi và tra cứu sản phẩm. Điều này đặc biệt hữu ích trong những trường hợp cần đồng bộ dữ liệu từ các hệ thống bên ngoài (chẳng hạn như ERP, hệ thống chuỗi cung ứng) hoặc xây dựng các bảng

Đọc thêm WooCommerce Từ Nhập Môn Đến Chuyên Nghiệp: Hướng Dẫn Cuối Cùng Về Cách Xây Dựng Trang Web Thương Mại Điện Tử Chuyên Nghiệp

Trước khi sử dụng API, bạn cần tạo các khóa API (Consumer Key và Consumer Secret) trong cài đặt của WooCommerce. Điều này có thể được thực hiện bằng ngôn ngữ Python.requestsĐây là ví dụ về mã nguồn dùng để cập nhật giá hàng loạt sản phẩm trong thư viện:

UltaHost – Nhà cung cấp dịch vụ máy chủ WordPress chuyên nghiệp
Bảo đảm hoàn tiền trong 30 ngày, băng thông và cơ sở dữ liệu không giới hạn, bảo vệ DDoS miễn phí, mua 3 năm ưu đãi 50%
import requests
import base64
import json

# 配置你的网站地址和API密钥
url = "https://你的网站域名.com/wp-json/wc/v3/products"
consumer_key = "ck_your_consumer_key"
consumer_secret = "cs_your_consumer_secret"

# 构建认证信息(Basic Auth)
auth = base64.b64encode(f'{consumer_key}:{consumer_secret}'.encode()).decode()

headers = {
    'Authorization': f'Basic {auth}',
    'Content-Type': 'application/json'
}

# 假设有一个商品ID和对应新价格的字典
products_to_update = {123: 29.99, 456: 45.50, 789: 15.00}

for product_id, new_price in products_to_update.items():
    data = {
        'regular_price': str(new_price)
    }
    response = requests.put(f'{url}/{product_id}', headers=headers, data=json.dumps(data))

if response.status_code == 200:
        print(f"商品 {product_id} 价格更新成功。")
    else:
        print(f"商品 {product_id} 更新失败: {response.text}")

Sử dụng công cụ dòng lệnh WP-CLI

Đối với các thao tác trên máy chủ, WP-CLI là một trong những công cụ hiệu quả nhất. Nó cho phép bạn tương tác trực tiếp với cơ sở dữ liệu WordPress thông qua dòng lệnh, vượt qua các giới hạn về bộ nhớ của máy chủ web và PHP, đặc biệt phù hợp để xử lý lượng dữ liệu sản phẩm lớn (hàng nghìn mục).

Ví dụ, bạn có thể sử dụng…wp wc product listLệnh này sẽ liệt kê tất cả các sản phẩm, sau đó sử dụng ống dẫn (pipe) và kết hợp với các script để thực hiện việc cập nhật hàng loạt. Một trường hợp sử dụng điển hình là thay đổi trạng thái hàng tồn kho của tất cả các sản phẩm thuộc một danh mục cụ thể một cách đồng loạt.

# 获取所有“清仓”分类下的商品ID
wp wc product list --category=清仓 --field=id --format=csv > clearance_ids.csv

# 读取CSV文件并批量设置为“缺货”
for id in $(cat clearance_ids.csv); do
  wp wc product update $id --stock_status=outofstock
done

Viết script PHP tùy chỉnh

Việc thực thi các script PHP ngay trong môi trường WordPress mang lại sự linh hoạt tối đa và quyền truy cập trực tiếp vào các chức năng cốt lõi của WooCommerce. Bạn có thể tạo ra một trang plugin tùy chỉnh, hoặc sử dụng các script tạm thời được kích hoạt thông qua trình duyệt hoặc WP-CLI để thực hiện các nhiệm vụ cụ thể.

Trong phương pháp này, yếu tố then chốt là phải khởi tạo môi trường WordPress một cách chính xác để có thể sử dụng nó được.WC_Productwc_get_product()wp_set_post_terms()Bao gồm tất cả các hàm và lớp tích hợp sẵn của WooCommerce và WordPress.

Đọc thêm Từ con số không đến sự thành thạo: Hướng dẫn kỹ thuật toàn diện và chiến lược thực hành xây dựng trang web hiện đại

Kỹ năng thực chiến: Cập nhật nhanh chóng và hiệu quả các thuộc tính sản phẩm theo lô

Việc cập nhật giá cả, hàng tồn kho, phân loại hoặc thẻ sản phẩm theo lô là một yêu cầu phổ biến. Những thực tiễn sau đây có thể giúp đảm bảo rằng các thao tác được thực hiện một cách hiệu quả và ổn định:

Xây dựng các hàm nhập/dữ liệu cập nhật có thể được tái sử dụng

Hãy viết một hàm xử lý chung, ví dụ như…batch_update_products_from_csvNó có thể nhận một đường dẫn tệp hoặc một mảng dữ liệu, tiến hành phân tích nội dung và xử lý từng dòng trong mảng đó một cách lặp đi lặp lại. Bên trong hàm, cần phải có các biện pháp xử lý lỗi (chẳng hạn như ghi nhật ký, bỏ qua những phần dữ liệu không hợp lệ) cũng như c

function batch_update_products_from_csv($file_path) {
    if (($handle = fopen($file_path, "r")) !== FALSE) {
        // 假设第一行是标题:ID,SKU,Price,Stock
        $headers = fgetcsv($handle);

$success_count = 0;
        $error_count = 0;
        $error_log = [];

while (($data = fgetcsv($handle)) !== FALSE) {
            $product_id = intval($data[0]); // 根据CSV列索引获取ID
            $product = wc_get_product($product_id);

if (!$product) {
                $error_log[] = "ID {$product_id}: 商品未找到。";
                $error_count++;
                continue;
            }

try {
                $product->set_regular_price($data[2]); // 设置价格
                $product->set_stock_quantity(intval($data[3])); // 设置库存
                $product->save();
                $success_count++;
            } catch (Exception $e) {
                $error_log[] = "ID {$product_id}: 保存失败 - " . $e->getMessage();
                $error_count++;
            }
        }
        fclose($handle);

// 输出结果
        echo "完成!成功:{$success_count}, 失败:{$error_count}。";
        if (!empty($error_log)) {
            echo "<pre>错误详情:" . print_r($error_log, true) . "</pre>";
        }
    }
}

Xử lý mối liên hệ giữa các danh mục, thẻ (tags) và thuộc tính (attributes)

Các thao tác liên quan đến phân loại sản phẩm, thẻ (tags), và các thuộc tính có thể thay đổi (variable attributes) khá phức tạp. Khi cập nhật phân loại hoặc thuộc tính, cần sử dụng các quy trình hoặc công cụ phù hợp để đảm bảo tính nhất quán và chính xác của dữ liệu.wp_set_object_terms()Đối với các thuộc tính của sản phẩm có thể thay đổi, trước tiên cần đảm bảo rằng các thuộc tính toàn cục (global attributes) đã được khai báo và tồn tại, sau đó mới tiến hành xây dựng (build) các thông tin liên quan đến sản phẩm đó.$product->set_attributes()Cấu trúc dữ liệu cụ thể cần thiết.

Hosting.com - lưu trữ chia sẻ
Hiệu năng cao, được trang bị CPU AMD EPYC, lưu trữ SSD NVMe và LiteSpeed, hỗ trợ chuyên gia nội bộ 24 giờ/ngày, các biện pháp bảo mật tiên tiến bao gồm SSL, chống brute force, phần mềm độc hại và bảo vệ DDoS, tiết kiệm tới 73%.

Chiến lược tối ưu hóa hiệu năng và xử lý lỗi

Khi xử lý lượng dữ liệu khổng lồ, hiệu năng và tính ổn định là những yếu tố vô cùng quan trọng. Các thao tác không đúng cách có thể dẫn đến tình trạng máy chủ bị quá tải hoặc cơ sở dữ liệu phải chịu áp lực quá lớn.

Kiểm soát việc sử dụng bộ nhớ và thời gian thực thi chương trình

Trong các script PHP tùy chỉnh, bạn có thể sử dụng (các công cụ, lệnh, cấu trúc dữ liệu, v.v.) theo nhu cầu của mình. Ví dụ:set_time_limit(0)Điều này có thể giúp tránh tình trạng thời gian thực hiện script bị quá hạn (timeout). Đồng thời, sau khi xử lý một số lượng nhất định sản phẩm (ví dụ: mỗi 100 sản phẩm), hãy sử dụng…wp_cache_flush()gc_collect_cycles()Đây là lệnh dùng để dọn dẹp bộ nhớ, nhằm ngăn chặn việc script bị sập do hết bộ nhớ.

Ngoài ra, hãy luôn truy cập thông tin sản phẩm thông qua mã sản phẩm (Product ID) hoặc mã SKU (Stock Keeping Unit).WC_ProductThay vì phải truy vấn tất cả các sản phẩm rồi mới lọc kết quả, việc sử dụng các đối tượng cụ thể sẽ giúp giảm đáng kể lượng tài nguyên được tiêu thụ trong quá trình tải trang ban đầu.

Đọc thêm Hướng dẫn xây dựng trang web thương mại điện tử WooCommerce từ đầu đến cuối: Cẩm nang toàn diện và các thực tiễn tốt nhất

Thực hiện việc ghi nhật ký lỗi một cách đầy đủ và hiệu quả.

Đừng bao giờ giả định rằng các thao tác xử lý hàng loạt sẽ luôn thành công 100%. Hãy thiết lập một hệ thống nhật ký để ghi lại kết quả của mỗi thao tác (thành công hay thất bại) cùng với lý do tại sao. Các thông tin nhật ký có thể được lưu vào tệp tin, cơ sở dữ liệu, hoặc được gửi qua email cho người quản trị viên.try...catchHệ thống bắt lỗi khi có sự cố xảy ra, đồng thời ghi lại ID sản phẩm và thông tin lỗi chi tiết để thuận tiện cho việc kiểm tra và thử lại sau này.

// 在循环内部
try {
    $product->save();
    $logger->info("商品 {$product_id} 更新成功。");
} catch (Exception $e) {
    $logger->error("商品 {$product_id} 更新失败: " . $e->getMessage());
    // 可以选择将失败的商品ID加入一个数组,稍后重试或通知
}

Các trường hợp sử dụng nâng cao và tự động hóa

Sau khi nắm vững các thao tác xử lý hàng loạt cơ bản, bạn có thể áp dụng chúng vào các quy trình tự động hóa phức tạp hơn.

Máy chủ chia sẻ của InterServer
Lưu trữ chia sẻ với mức phí $2,50 USD mỗi tháng, giảm giá $0,1 USD trong tháng đầu tiên, mã giảm giá tryinterserver, với 461 ứng dụng đám mây và cài đặt chỉ bằng một cú nhấp chuột.

Đồng bộ hóa với hệ thống quản lý kho hàng bên ngoài

Bạn có thể viết một tác vụ định kỳ (Cron Job) để thường xuyên gọi một script tùy chỉnh. Script này sẽ lấy dữ liệu hàng tồn kho và giá cả mới từ một API bên ngoài (chẳng hạn như hệ thống quản lý hàng tồn kho), sau đó so sánh và cập nhật thông tin sản phẩm trong WooCommerce. Điều quan trọng là thiết kế một logic phù hợp để tìm kiếm các sản phẩm cần cập nhật (thường sử dụng mã SKU – Stock Keeping Unit), và chỉ cập nhật những trường thay đổi, nhằm giảm bớt lượng dữ liệu được ghi vào cơ sở dữ liệu.

Hủy bỏ hoặc lưu trữ hàng hóa theo nhóm dựa trên các điều kiện nhất định

Ví dụ, bạn có thể tạo một script để tự động thay đổi trạng thái của những sản phẩm không được bán trong hơn 90 ngày và có lượng hàng tồn kho bằng không thành “Độc quyền” (Private) hoặc chuyển chúng sang thư mục “Lưu trữ” (Archive). Điều này đòi hỏi phải xử lý dữ liệu liên quan đến các sản phẩm đwp_postswc_order_product_lookupThực hiện truy vấn kết hợp từ nhiều bảng để thu được danh sách sản phẩm đáp ứng các điều kiện phức tạp, sau đó tiến hành cập nhật trạng thái của chúng theo lô.

Tóm lại

Việc xử lý dữ liệu sản phẩm của WooCommerce một cách tự động và hàng loạt thông qua các kỹ thuật lập trình là một kỹ năng mạnh mẽ, giúp các nhà phát triển thoát khỏi những thao tác thủ công phức tạp, từ đó nâng cao đáng kể hiệu suất và độ chính xác trong việc vận hành các trang web thương mại điện tử. Từ các API REST tiêu chuẩn, công cụ WP-CLI hiệu quả cho đến các script PHP tùy chỉnh linh hoạt, các nhà phát triển có thể lựa chọn công cụ phù hợp nhất tùy theo từng tình huống cụ thể. Trong thực tế, việc chú trọng đến độ bền của mã nguồn, xử lý lỗi và tối ưu hóa hiệu năng là yếu tố then chốt để đạt được thành công. Bằng cách tích hợp những công nghệ này vào các quy trình tự động hóa, người dùng có thể quản lý dữ liệu sản phẩm một cách thông minh và có hệ thống, từ đó tạo nền tảng vững chắc cho sự vận hành ổn định lâu dài của cửa hàng WooCommerce.

FAQ 常见问题

Khi sử dụng REST API để cập nhật dữ liệu theo lô (batch update), làm thế nào để tránh tình trạng gửi quá nhiều yêu cầu (requests) và làm cho máy chủ bị giới hạn về khả năng xử lý?

Đề nghị thực hiện việc kiểm soát tốc độ yêu cầu (request rate control) trong mã nguồn. Sau mỗi lần gọi API trong vòng lặp, hãy sử dụng cơ chế kiểm soát tốc độ yêu cầu để đảm bảo rằng không có quá nhiều yêu cầu được gửi đi trong một khoảng thời gian nhất định.sleep()Hàm sẽ tạm dừng hoạt động trong một khoảng thời gian ngắn (ví dụ: 0,5 giây) nhằm giảm tần suất gửi yêu cầu. Ngoài ra, hãy kiểm tra xem máy chủ hoặc hệ thống CDN của bạn có áp dụng các giới hạn về tốc độ truy cập vào API hay không, và cố gắng thực hiện các thao tác hàng loạt vào những thời điểm lưu lượng truy cập thấp. Đối với các bộ dữ liệu có dung lượng lớn, hãy xem xét việc chia nhỏ các tác vụ cập nhật thành nhiều lần và thực hiện chúng

Trong quá trình cập nhật hàng loạt, những thay đổi được thực hiện trên sản phẩm có được ghi lại bởi các hành động (actions) và hook của WooCommerce không?

Vâng, được thực hiện.WC_Productobject-basedsave()Cách cập nhật này hoạt động tương tự như việc thực hiện thao tác lưu trữ thủ công trong giao diện quản trị; nó sẽ kích hoạt tất cả các hành động (actions) và hook của WooCommerce liên quan. Ví dụ:woocommerce_update_productwoocommerce_process_product_metaĐiều này có nghĩa là các tiện ích bổ sung (plugin) của bên thứ ba hoặc đoạn mã tùy chỉnh (custom code) phụ thuộc vào những “hook” này cũng sẽ hoạt động bình thường.

Làm thế nào để cập nhật hàng loạt các biến thể (Variations) của sản phẩm có thể thay đổi (Variable Product)?

Bạn cần truy cập đối tượng sản phẩm có thể thay đổi ở cấp độ cha trước, sau đó mới sử dụng nó.get_available_variations()get_children()Phương thức này được sử dụng để lấy ID của tất cả các sản phẩm con. Sau đó, chúng ta lặp qua từng ID sản phẩm con và sử dụng nó để thực hiện các thao tác cần thiết.wc_get_product($variation_id)Hãy lấy đối tượng sản phẩm con, sau đó thực hiện các thao tác tương tự như khi cập nhật một sản phẩm đơn giản. Lưu ý rằng các thuộc tính như giá cả, hàng tồn kho của sản phẩm con được thiết lập một cách độc lập.

Tại sao trong các script tùy chỉnh, việc trực tiếp sử dụng câu lệnh SQL để thao tác cơ sở dữ liệu không được khuyến nghị?

Mặc dù việc thực thi trực tiếp các câu lệnh SQL (như…)UPDATE wp_postmetaCó thể phương pháp này sẽ mang lại tốc độ xử lý nhanh nhất, nhưng nó cực kỳ nguy hiểm. Nó sẽ bỏ qua hoàn toàn mọi quy trình xác thực dữ liệu, các hook (hàm được gọi tự động trong hệ thống), việc làm sạch bộ đệm (cache), và các logic cập nhật dữ liệu liên quan của WooCommerce và WordPress. Điều này có thể dẫn đến các hậu quả nghiêm trọng như dữ liệu không nhất quán, bộ đệm không còn hiệu lực, và không thể gửi các thông báo qua email theo đúng yêu cầu, đồng thời tạo ra những rủi ro khó khăn trong việc gỡ lỗi. Chỉ nên xem xét việc trực tiếp thao tác với cơ sở dữ liệu trong những trường hợp rất hiếm khi bạn biết rõ tất cả các tác động có thể xảy ra, và nhất định phải thực hiện việc sao lưu dữ liệu một cách đầy đủ trước khi thực hi