Tới nội dung chính
hstation
Dịch vụDự ánVề tôiBlogThư viện nhạc

WordPress · 11 phút đọc · 2026-09-17

Bảo trì website WordPress bằng WP-CLI và biên bản đầu ra

Một dòng Success không đủ để kết luận website đã ổn, vì có lệnh chỉ báo lệnh chạy xong chứ chưa xác nhận toàn bộ việc hoàn tất. Quy trình này ghi lại trạng thái, kiểm tra Site Health, revision, transient, Cron và checksum trước khi quyết định cập nhật hay xoá dữ liệu.

Bảo trì website WordPress thường được hiểu là "bấm cập nhật mỗi tháng". Mình chạy thử một vòng bảo trì đầy đủ bằng WP-CLI trên một site thử, ghi lại đầu ra của từng lệnh, và thấy việc khó nhất không phải chạy lệnh mà là đọc đúng đầu ra. Có hai chỗ dòng cuối ghi "Success" trong khi việc chưa xong.

Site thử là bản sao WordPress 7.1 tiếng Việt chạy trên máy (Apache, MySQL 8.4), theme Twenty Twenty-Five, WP-CLI 2.12. Site mới dựng, nên có bước "không có gì để làm". Đó cũng là kết quả thật, và mình ghi nguyên như vậy.

Bảo trì website gồm những gì

Trong vòng bảo trì này, mình chạy bảy nhóm việc:

  1. Kiểm bản cập nhật cho lõi, plugin, theme.
  2. Đọc trang Tình trạng website.
  3. Dọn và giới hạn bản sửa bài viết.
  4. Xem thùng rác, bản nháp tự động, transient, dữ liệu autoload.
  5. Tối ưu cơ sở dữ liệu.
  6. Kiểm việc định kỳ (WP-Cron).
  7. Kiểm toàn vẹn tệp và tài khoản quản trị.

Trước khi làm bất cứ việc nào có xoá hay ghi đè, sao lưu đủ cơ sở dữ liệu lẫn wp-content theo bài Khôi phục website WordPress: sao lưu đủ hai phần.

1. Cập nhật

bash
wp core check-update
wp plugin list --fields=name,status,version,update
wp theme list --fields=name,status,version,update

Trên site thử:

  • Lõi: "Success: WordPress is at the latest version."
  • Plugin: akismet 5.7.2 và hello 1.7.2 không kích hoạt, query-monitor 4.0.7 đang bật; cột update đều là none.
  • Theme: twentytwentyfive 1.5 đang dùng; twentytwentyfour 1.6 và twentytwentythree 1.7 không dùng; cột update đều là none.

Trang Cập nhật trong wp-admin cho cùng kết quả:

Trang Cập nhật WordPress trong wp-admin. Phiên bản hiện tại 7.1, kiểm tra lần cuối ngày 17 Tháng 9, 2026 lúc 10:27 sáng +07. Dòng Bạn đang sử dụng phiên bản mới nhất của WordPress, kèm hai nút Cài lại phiên bản 7.1–vi và Ẩn cập nhật này. Các mục Plugins, Giao diện, Bản dịch đều ghi đã được cập nhật.
Trang Cập nhật WordPress trong wp-admin. Phiên bản hiện tại 7.1, kiểm tra lần cuối ngày 17 Tháng 9, 2026 lúc 10:27 sáng +07. Dòng Bạn đang sử dụng phiên bản mới nhất của WordPress, kèm hai nút Cài lại phiên bản 7.1–vi và Ẩn cập nhật này. Các mục Plugins, Giao diện, Bản dịch đều ghi đã được cập nhật.

Chú ý hai plugin và hai theme không dùng. Chúng sẽ quay lại ở bước sau.

2. Tình trạng website

Mở wp-admin, vào Công cụ, chọn Tình trạng website:

Trang Tình trạng website ghi Tốt và 5 cải tiến được đề xuất: Bạn nên gỡ bỏ các plugin không kích hoạt, nhãn Bảo mật; Bạn nên xóa giao diện không sử dụng, nhãn Bảo mật; Một hoặc nhiều mô-đun được đề xuất bị thiếu, nhãn Hiệu suất; Các công cụ tìm kiếm không nên lập chỉ mục trang web này, nhãn Riêng tư; Bộ nhớ đệm Opcode không được bật, nhãn Hiệu suất.
Trang Tình trạng website ghi Tốt và 5 cải tiến được đề xuất: Bạn nên gỡ bỏ các plugin không kích hoạt, nhãn Bảo mật; Bạn nên xóa giao diện không sử dụng, nhãn Bảo mật; Một hoặc nhiều mô-đun được đề xuất bị thiếu, nhãn Hiệu suất; Các công cụ tìm kiếm không nên lập chỉ mục trang web này, nhãn Riêng tư; Bộ nhớ đệm Opcode không được bật, nhãn Hiệu suất.

Hai đề xuất đầu khớp đúng danh sách plugin và theme không dùng ở bước 1. Đề xuất "công cụ tìm kiếm không nên lập chỉ mục" là do site thử đang bật chặn lập chỉ mục. Trên site thật mà thấy dòng này, đó là việc cần sửa ngay.

3. Bản sửa bài viết

Mỗi lần lưu một bài đã có, WordPress giữ lại một bản sửa. Mình đo trên site thử:

bash
wp post list --post_type=revision --format=count
  • wp-config.php của site thử không đặt WP_POST_REVISIONS. Sửa một bài 5 lần thì ra 5 bản sửa.
  • Xoá hết bản sửa, mất 737 ms, còn 0:
bash
wp post delete $(wp post list --post_type=revision --format=ids) --force
  • Đặt giới hạn 3 bản sửa rồi sửa bài 5 lần thì còn 3 bản sửa.

Lệnh đặt giới hạn là chỗ mình vấp. Chạy dạng thông thường:

bash
wp config set WP_POST_REVISIONS 3 --raw

lệnh báo "Error: Could not process the 'wp-config.php' transformation. Reason: Unable to locate placement anchor." vì wp-config.php của site thử không có dòng mốc mặc định. Lượt đó mình không để ý dòng Error, sửa bài 5 lần, và vẫn ra 5 bản sửa: giới hạn chưa hề được đặt. Chạy lại với mốc chỉ rõ thì được:

bash
wp config set WP_POST_REVISIONS 3 --raw --anchor="require_once ABSPATH . 'wp-settings.php';" --placement=before

Đã xong khi wp config get WP_POST_REVISIONS in ra 3.

4. Thùng rác, bản nháp tự động, transient, autoload

bash
wp post list --post_status=trash --post_type=any --format=count
wp transient delete --expired
wp option list --autoload=on --format=total_bytes
  • Thùng rác: 0. Bản nháp tự động: 1.
  • Transient: 5, không cái nào hết hạn ("Success: No expired transients found.").
  • Tổng dữ liệu autoload: 50.624 byte.

Con số autoload là số để ghi lại mỗi lần bảo trì. Một lần đo không nói lên gì; lần sau so với lần này mới biết nó có phình lên không.

5. Tối ưu cơ sở dữ liệu: chữ Success đầu tiên

bash
wp db optimize

Lệnh chạy 892 ms và dòng cuối ghi "Success: Database optimized." Nhưng đọc toàn văn đầu ra thì thấy:

  • 12 dòng "Table does not support optimize, doing recreate + analyze instead".
  • 4 dòng "status : Operation failed", kèm lỗi như "Invalid default value for 'comment_date'" ở bảng wp_comments và "Invalid default value for 'link_updated'" ở bảng wp_links.

Dung lượng cơ sở dữ liệu đo bằng wp db size --size_format=kb là 2176 trước và 2176 sau. Nghĩa là 4 bảng không được tối ưu, và dòng Success không nói điều đó. Mình chưa sửa lỗi này; ghi lại ở đây để bạn biết đọc toàn văn chứ đừng đọc dòng cuối.

6. Việc định kỳ

bash
wp cron event list --fields=hook,next_run_relative
wp cron test

Site thử có 12 việc định kỳ, gồm wp_version_check, wp_update_plugins, wp_update_themes, delete_expired_transients, wp_site_health_scheduled_check. Lệnh wp cron test ra "Success: WP-Cron spawning is working as expected."

7. Toàn vẹn tệp và tài khoản

bash
wp core verify-checksums
wp plugin verify-checksums --all
wp user list --role=administrator --format=count

Site thử: lõi khớp checksum, "Verified 3 of 3 plugins", 1 quản trị viên. Cách đọc kết quả khi không sạch nằm ở bài Website WordPress bị hack: kiểm dấu vết bằng WP-CLI. Ở đó cũng có chữ Success thứ hai dễ đọc nhầm.

Lưu đầu ra mỗi lần bảo trì website WordPress

Cả hai chữ Success dễ đọc nhầm trong bài đều chỉ lộ ra khi đọc toàn văn đầu ra. Vì vậy mình lưu đầu ra vào một tệp có ghi ngày, thay vì đọc lướt trên màn hình rồi đóng lại:

bash
wp db optimize > bao-tri-$(date +%F).txt 2>&1
grep -n "Operation failed\|Warning\|Error" bao-tri-$(date +%F).txt

Lệnh thứ hai lọc ra đúng những dòng cần đọc. Lần bảo trì sau, mở tệp cũ ra so: con số autoload, số bản sửa, số bảng lỗi có tăng không. Không có tệp cũ thì không có gì để so.

Checklist bảo trì website WordPress, rút từ vòng chạy này

  • Sao lưu đủ hai phần trước khi làm.
  • Ghi lại danh sách plugin và theme có bản cập nhật, và cái nào không dùng.
  • Đọc hết đề xuất trong Tình trạng website.
  • Đếm bản sửa; nếu đặt giới hạn, kiểm lại bằng wp config get.
  • Ghi con số autoload để so với lần sau.
  • Chạy wp db optimize và đọc toàn văn, tìm "Operation failed".
  • Chạy wp cron test.
  • Chạy hai lệnh checksum và đếm quản trị viên, đọc cả dòng Warning.

Mình không có số liệu để nói bảo trì WordPress bao lâu một lần là đủ. Điều mình đo được là: chăm sóc website WordPress bằng dòng lệnh thì nhanh, nhưng chỉ đáng tin khi bạn lưu đầu ra và đọc hết nó. Người quản trị website WordPress đọc mỗi dòng cuối sẽ bỏ sót đúng hai chỗ trong bài này.

Những gì mình chưa kiểm

  • Chưa đo site lớn có nhiều bản sửa, nên không có con số "dọn xong nhẹ đi bao nhiêu".
  • Chưa sửa lỗi "Invalid default value" của 4 bảng.
  • Chưa thử plugin tối ưu cơ sở dữ liệu nào.
  • Chưa cập nhật thật một plugin có bản mới, vì site thử không có bản mới nào.