Cách sửa lỗi WordPress 'Update Failed: Download failed. Unauthorized'

intermediate📝 WordPress2026-06-24| WordPress 5.0+, PHP 7.4/8.x, Linux/Apache/Nginx (Thường gặp với các plugin trả phí như Elementor Pro, ACF Pro, WP Rocket, hoặc theme Avada).

Error Message

Update Failed: Download failed. Unauthorized
#wordpress#sua-loi-plugin#wp-cli#elementor#khac-phuc-su-co

Bối cảnh

Tôi đang thực hiện dở dang đợt bảo trì định kỳ trên trang web sản xuất của khách hàng thì một bản cập nhật đơn giản gặp trở ngại. Mọi thứ trông có vẻ bình thường cho đến khi tôi nhấn 'Update' cho Elementor Pro và Advanced Custom Fields Pro. Thay vì thanh tiến trình như thường lệ, WordPress trả về một thông báo màu đỏ ngắn gọn:

Update Failed: Download failed. Unauthorized

Lỗi này nổi tiếng là mơ hồ. Nó không chỉ rõ vấn đề nằm ở quyền hạn máy chủ, bị tường lửa chặn, hay trạng thái đăng ký gói dịch vụ của bạn. Theo kinh nghiệm của tôi, vấn đề thường xuất phát từ việc gián đoạn kết nối giữa bản cài đặt WordPress của bạn và API cập nhật của nhà cung cấp.

Quy trình kiểm tra lỗi (Debug)

Trước khi can thiệp vào mã nguồn, tôi bắt đầu với những bước đơn giản nhất. Tôi kiểm tra Tools > Site Health để xác nhận máy chủ thực sự có thể kết nối với các API bên ngoài. Kết quả là có thể. Từ đó, tôi chuyển sang phần cài đặt plugin để tìm kiếm ba dấu hiệu khả nghi cụ thể:

  • Hiệu lực của bản quyền (License): Đăng ký đã hết hạn chưa? Thậm chí chỉ cần quá hạn một ngày cũng có thể kích hoạt phản hồi 401 Unauthorized từ máy chủ của nhà cung cấp.
  • Sai lệch tên miền: Bản quyền có còn đang bị liên kết với môi trường thử nghiệm (staging) như dev.local hoặc test.example.com trong khi bạn đang cố gắng cập nhật trên tên miền sản xuất chính thức không?
  • Dữ liệu tạm (Transients) cũ: WordPress lưu trữ siêu dữ liệu cập nhật trong cơ sở dữ liệu khoảng 12 giờ. Nếu API từng từ chối yêu cầu một lần, WordPress có thể sẽ tiếp tục hiển thị cho bạn phản hồi 'Unauthorized' đã được lưu trong bộ nhớ đệm đó.

Giải pháp

1. Đồng bộ lại bản quyền (Cách khắc phục hiệu quả đến 90%)

Hầu hết các nhà phát triển trả phí sử dụng hệ thống dựa trên mã thông báo (token) để xác thực tên miền của bạn. Nếu mã thông báo đó hết hạn hoặc quá trình bắt tay (handshake) thất bại, việc tải xuống sẽ bị chặn. Đối với các plugin như Elementor hoặc WP Rocket, một bước 'đặt lại' nhanh thường sẽ giải quyết được vấn đề.

  • Truy cập vào trang cài đặt bản quyền hoặc tài khoản của plugin.
  • Nhấn Disconnect hoặc Deactivate License.
  • Tải lại bảng điều khiển, sau đó nhấn Connect & Activate để lấy mã thông báo API mới từ nhà cung cấp.

2. Xóa các dữ liệu tạm (Transients) cập nhật của WordPress

Nếu bạn đã gia hạn bản quyền nhưng lỗi vẫn còn, có khả năng WordPress đang bị kẹt ở trạng thái lỗi được lưu trong bộ nhớ đệm. Bạn cần buộc trang web phải kết nối lại với máy chủ của nhà cung cấp. Sử dụng WP-CLI là cách hiệu quả nhất để xóa dữ liệu này.

# Xóa tất cả các transients trong bộ nhớ đệm
wp transient delete --all

# Buộc WordPress kiểm tra dữ liệu plugin mới
wp plugin update --all --dry-run

Nếu bạn không quen sử dụng dòng lệnh, hãy điều hướng đến Dashboard > Updates. Nhấn nút "Check Again". Thao tác này sẽ kích hoạt làm mới danh sách cập nhật một cách thủ công và xóa mục _site_transient_update_plugins trong cơ sở dữ liệu của bạn.

3. Giải quyết sai lệch tên miền trong cổng thông tin nhà cung cấp

Các nhà cung cấp thường liên kết cứng bản quyền với một URL cụ thể. Nếu bạn đã chuyển từ máy chủ thử nghiệm sang máy chủ sản xuất, nhà cung cấp có thể vẫn nghĩ rằng bản quyền thuộc về địa chỉ cũ. Đăng nhập vào tài khoản của bạn tại elementor.com hoặc wp-rocket.me và kiểm tra danh sách 'Active Sites'. Nếu URL cũ vẫn còn, hãy xóa nó và cấp quyền cho tên miền sản xuất mới.

4. Cập nhật thủ công (Phương án dự phòng khẩn cấp)

Khi bạn đang đối mặt với một bản vá bảo mật quan trọng mà API không hợp tác, hãy bỏ qua trình cài đặt tự động. Cập nhật thủ công sẽ bỏ qua lỗi 'Download failed' vì bạn tự thực hiện việc chuyển tệp.

  • Tải xuống tệp .zip mới nhất trực tiếp từ khu vực thành viên của nhà cung cấp.
  • Điều hướng đến Plugins > Add New > Upload Plugin.
  • Tải lên phiên bản mới. WordPress sẽ nhận diện thư mục hiện có và hỏi bạn có muốn thay thế nó không. Chọn "Replace current with uploaded."

5. Kiểm tra wp-config.php để tìm các hạn chế

Đôi khi, các môi trường bảo mật cao hoặc các nhà phát triển trước đó có thể đã khóa khả năng chỉnh sửa tệp hoặc thực hiện các cuộc gọi ra bên ngoài của trang web. Kiểm tra tệp wp-config.php của bạn để tìm các dòng lệnh sau:

// Nếu giá trị này được đặt là true, các nút cập nhật trên giao diện người dùng sẽ bị vô hiệu hóa hoặc thất bại
define( 'DISALLOW_FILE_MODS', false );

// Đảm bảo trang web không bị chặn thực hiện các cuộc gọi API bên ngoài
// define( 'WP_HTTP_BLOCK_EXTERNAL', true ); 

Xác minh

Sau khi đồng bộ lại bản quyền hoặc xóa các transients, hãy quay lại Dashboard > Updates. Chọn plugin và thử cập nhật lại. Một lần sửa lỗi thành công sẽ trông như thế này:

Downloading update from https://api.vendor.com/...
Unpacking the update...
Installing the latest version...
Plugin updated successfully.

Nếu lỗi vẫn còn, hãy kiểm tra nhật ký lỗi PHP của máy chủ tại /var/log/apache2/error.log hoặc wp-content/debug.log. Tìm kiếm các lỗi 403 Forbidden, điều này có thể cho thấy tường lửa của nhà cung cấp dịch vụ lưu trữ đang chặn dải IP của nhà cung cấp plugin.

Bài học kinh nghiệm

  • Ưu tiên bản quyền trước, máy chủ sau: Trong hệ sinh thái WordPress, 'Unauthorized' hầu như luôn chỉ ra sự sai lệch về bản quyền thay vì quyền hạn thư mục.
  • Dọn dẹp môi trường thử nghiệm: Luôn hủy kích hoạt bản quyền trên các trang web thử nghiệm trước khi chuyển sang sản xuất để tránh xung đột tên miền.
  • Transients rất "lỳ lợm": WordPress không kiểm tra cập nhật trong thời gian thực. Khi xử lý sự cố, hãy luôn buộc làm mới thông qua bảng điều khiển Cập nhật.

Related Error Notes