Trả lời nhanh: Nguyên tắc sống còn khi tùy biến WooCommerce: không sửa file trong plugin gốc và không sửa theme mẹ, vì bản cập nhật kế tiếp sẽ ghi đè hết. Cách đúng là dùng hook (action và filter) đặt trong một plugin nhỏ của riêng bạn. Claude Code làm phần này rất nhanh vì nó tra được tên hook và viết đúng khuôn, nhưng bạn phải cho nó chạy trên bản staging chứ không phải web đang bán hàng.
Chủ shop nào chạy WooCommerce cũng tới lúc cần một thứ mà không plugin nào làm đúng ý: thêm phí theo tỉnh, đổi cách hiển thị giá, gắn nhãn riêng cho đơn sỉ. Thuê ngoài thì lâu và tốn, tự mò thì sợ vỡ web đang bán. Claude Code rút ngắn phần viết code rất nhiều, nhưng chỉ an toàn khi bạn đặt nó vào đúng quy trình. Bài này là quy trình đó, viết cho người biết dùng WordPress ở mức quản trị viên, không cần là lập trình viên chuyên nghiệp.
Vì sao phải đi bằng hook, nói bằng ngôn ngữ chủ shop
WooCommerce và theme của bạn đều được nhà phát triển cập nhật thường xuyên, và mỗi lần cập nhật là toàn bộ file gốc bị thay mới. Sửa thẳng vào đó giống như viết lên tờ giấy sắp bị thay: lần cập nhật kế tiếp, tùy biến của bạn biến mất, thường là biến mất lặng lẽ giữa mùa bán hàng.
Hook là những điểm móc mà WooCommerce chừa sẵn để người ngoài chen code vào mà không đụng vào ruột. Có hai loại: action để chèn thêm việc tại một thời điểm (ví dụ sau khi đơn hàng hoàn tất thì gửi thông báo), và filter để sửa một giá trị trước khi nó được dùng (ví dụ đổi cách hiển thị giá). Code viết theo hook sống sót qua mọi bản cập nhật.
Vậy đặt code hook ở đâu? Đừng đặt trong functions.php của theme, vì đổi theme là mất. Đặt trong một plugin nhỏ do bạn tạo, ví dụ tên là shop-cua-toi. Bật tắt được, gỡ được, chuyển sang máy chủ khác cũng mang theo được.
Dựng plugin riêng trong ba phút
Tạo thư mục wp-content/plugins/shop-cua-toi/ với một file shop-cua-toi.php, nội dung khởi đầu chỉ cần chừng này:
<?php/** * Plugin Name: Tuy bien shop cua toi * Description: Cac tuy bien WooCommerce rieng cua shop, dung hook, khong sua core. * Version: 1.0.0 */if (!defined('ABSPATH')) exit; // chặn truy cập trực tiếp // Ví dụ: thêm ghi chú dưới nút thêm vào giỏ hàngadd_action('woocommerce_after_add_to_cart_button', function () { echo '<p class="ghi-chu-shop">Giao trong 24h noi thanh</p>';});Vào trang Plugins trong bảng quản trị, kích hoạt, xong. Từ giờ mọi tùy biến đều thêm vào file này hoặc các file con trong cùng thư mục. Khi có sự cố, bạn tắt đúng một plugin là web trở lại nguyên trạng, thay vì phải đi tìm xem mình đã sửa những đâu.
Giao việc cho Claude Code sao cho ra code dùng được
Điểm mạnh của agent ở đây là nó thuộc hệ thống hook của WooCommerce và viết đúng khuôn ngay lần đầu. Điểm yếu là nó không biết shop bạn bán gì, khách của bạn hành xử ra sao, và theme bạn dùng đã tùy biến những gì. Cho nên yêu cầu phải kèm ngữ cảnh:
Trong plugin wp-content/plugins/shop-cua-toi, thêm tính năng:với đơn hàng có tổng từ 2 triệu trở lên, hiện nhãn "Miễn phí vận chuyển"ở trang sản phẩm và bỏ phí ship ở trang thanh toán.Ràng buộc:- Chỉ dùng hook của WooCommerce, không sửa file ngoài thư mục plugin này- Không tạo bảng mới trong database- Viết ghi chú tiếng Việt cho từng đoạn- Sau khi viết, liệt kê các bước tôi cần bấm để kiểm thửBa chi tiết đáng học trong yêu cầu trên: khoanh vùng thư mục được phép sửa, cấm những thứ khó hoàn tác như tạo bảng mới, và bắt agent tự viết kịch bản kiểm thử. Muốn khỏi lặp lại các ràng buộc này mỗi lần, đưa chúng vào file luật theo bài CLAUDE.md.
Một thói quen nữa giúp bạn ngủ ngon: yêu cầu agent giải thích trước khi sửa. Đọc phần giải thích, nếu thấy nó định đụng vào chỗ không nên thì dừng ngay, rẻ hơn nhiều so với việc phát hiện sau khi web đã lỗi.
Staging là chỗ duy nhất được phép thử
Đây là phần nghiêm túc nhất của bài. Web đang bán hàng không phải nơi thử nghiệm, kể cả khi bạn tin vào đoạn code vừa nhận. Một lỗi ở trang thanh toán trong hai tiếng có thể tốn nhiều hơn cả năm tiền máy chủ.
Quy trình an toàn gồm bốn bước. Một, dựng bản sao của web ở một tên miền phụ hoặc một máy chủ riêng, chép cả cơ sở dữ liệu để có dữ liệu thật. Nếu bạn hay sửa code trực tiếp trên máy chủ, cách gọn nhất là dựng luôn máy dev từ xa rồi làm việc trên đó. Hai, chỉ cho Claude Code làm việc trên bản sao đó. Ba, kiểm thử theo đúng danh sách bước mà bạn đã bắt agent viết ra, và luôn có một lần đặt hàng thử từ đầu tới cuối gồm cả thanh toán. Bốn, khi đã chắc, chép riêng thư mục plugin sang web thật rồi kích hoạt, không chép đè cả mã nguồn.
Trước khi đẩy, sao lưu web thật, cả file lẫn cơ sở dữ liệu, theo bài backup VPS. Bản sao lưu chưa từng phục hồi thử thì chưa tính là bảo hiểm.
Máy chủ ảnh hưởng thế nào tới việc này
Hai chỗ liên quan trực tiếp. Thứ nhất là staging: bản sao web cần chỗ chạy, và đặt nó cùng một máy chủ với web thật là cách đơn giản nhất nếu máy còn dư tài nguyên, hoặc tách hẳn máy khác cho an toàn. Đây là lý do nhiều shop chọn gói VPS có dư một chút thay vì gói vừa khít.
Thứ hai là tốc độ khi shop lớn dần. WooCommerce nặng về cơ sở dữ liệu, mỗi lượt xem sản phẩm và mỗi thao tác trong trang quản trị đều là hàng loạt truy vấn nhỏ. Khi đơn hàng tích lũy tới hàng nghìn, đây là chỗ nghẽn trước tiên, và ổ đĩa nhanh tạo khác biệt rõ hơn cả việc tăng CPU. Chẩn đoán chi tiết nằm ở bài WooCommerce chậm khi nhiều đơn, còn cách chọn cấu hình theo lượng khách thì xem bài VPS cho WordPress.
Vì sao phải đi bằng điểm móc, nói bằng ngôn ngữ chủ shop
| Cách làm | Chuyện gì xảy ra khi cập nhật | Nên dùng không |
|---|---|---|
| Sửa thẳng tệp lõi của WooCommerce | Mất sạch thay đổi, và có thể vỡ shop | Không, tuyệt đối |
| Sửa thẳng tệp giao diện mua sẵn | Mất khi giao diện cập nhật | Không |
| Dùng giao diện con | Giữ được khi giao diện cha cập nhật | Được, cho phần hiển thị |
| Viết plugin riêng dùng điểm móc | Giữ nguyên qua mọi lần cập nhật | Đúng nhất, cho phần chức năng |
Nói bằng ngôn ngữ chủ shop: sửa thẳng vào lõi giống như xây thêm phòng trên đất thuê. Chủ đất sửa nhà một cái là phần bạn xây mất sạch. Điểm móc là chỗ nhà sản xuất chừa sẵn để bạn gắn thêm mà không đụng vào tường của họ.
Giao việc cho trợ lý sao cho ra mã dùng được
# Ba thu phai noi ro trong yeu cau, neu khong se ra ma khong dung duoc: # 1. Noi ro phai dung hook, khong duoc sua file loi# "Viet trong plugin rieng, chi dung action va filter cua WooCommerce" # 2. Noi ro phien ban WooCommerce va PHP dang chayphp -vwp plugin get woocommerce --field=version 2>/dev/null # 3. Noi ro moi truong: day la shop dang ban that hay ban thu# "Code nay se chay tren staging truoc, khong deploy thang" # Sau khi co ma: doc lai truoc khi dua len, chu y ba diem# - Co ghi truc tiep vao co so du lieu khong# - Co truy van trong vong lap khong# - Co kiem du lieu dau vao truoc khi dung khongMôi trường thử là chỗ duy nhất được phép thử
- Không bao giờ thử mã mới trên shop đang bán. Một lỗi trong luồng thanh toán là mất đơn và mất khách.
- Môi trường thử phải có dữ liệu giống thật về cấu trúc, nhưng dùng khóa thanh toán ở chế độ thử.
- Kiểm trọn luồng sau mỗi thay đổi: xem sản phẩm, thêm giỏ, thanh toán, nhận thư xác nhận, đơn hiện trong trang quản trị.
- Sao lưu trước khi đưa lên shop thật, và đưa lên vào khung giờ ít đơn nhất.
Máy chủ ảnh hưởng thế nào
Mã tùy biến thường thêm truy vấn vào mỗi lượt xem trang. Với shop ít đơn thì không cảm nhận được; với shop nhiều đơn thì mỗi truy vấn thừa nhân lên rất nhanh. Sau khi thêm tùy biến, đo lại thời gian trang giỏ hàng và trang thanh toán, không chỉ đo trang chủ. Xem bài về WooCommerce chậm khi nhiều đơn.
Câu hỏi thường gặp
Tôi không biết code, có tự làm theo bài này được không?
Được ở mức tùy biến nhỏ nếu bạn biết dùng bảng quản trị WordPress và dám thao tác với file qua trình quản lý file. Điều kiện bắt buộc là làm trên bản staging và có sao lưu. Với tính năng chạm tới thanh toán hoặc tồn kho, nên nhờ người có nghề soát lại trước khi đẩy lên web thật.
Claude Code có tự đẩy code lên web thật không?
Chỉ khi bạn cho phép. Hãy giữ agent trong phạm vi thư mục dự án trên máy staging và không đưa cho nó thông tin đăng nhập máy chủ thật. Việc đẩy lên production nên là thao tác tay của bạn, hoặc đi qua quy trình có bước duyệt.
Tùy biến bằng hook có làm web chậm đi không?
Vài hook nhẹ thì không đáng kể. Chậm thường đến từ code gọi truy vấn nặng trong vòng lặp hoặc gọi dịch vụ bên ngoài ngay trong lúc tải trang. Khi giao việc, yêu cầu agent tránh truy vấn trong vòng lặp và đo lại tốc độ trang sau khi bật tính năng mới.
Nên gộp mọi tùy biến vào một plugin hay tách nhiều plugin?
Với shop nhỏ thì một plugin duy nhất là gọn và dễ quản lý. Tách riêng khi một tính năng đủ lớn hoặc bạn muốn bật tắt độc lập, ví dụ phần tích hợp vận chuyển. Đặt tên file rõ ràng theo chức năng quan trọng hơn số lượng plugin.
