Khi WordPress bị mất nút “Cập nhật plugin”, nhiều người nghĩ do lỗi hệ thống. Nhưng thực tế, nguyên nhân thường nằm ở quyền user, cấu hình hoặc server.
Bài viết này giúp bạn debug nhanh – đúng bệnh – không đoán mò.
🎯 Mục tiêu
Xác định 3 vấn đề chính:
- User có quyền update plugin không?
- WordPress có bị khóa update không?
- Server có cho phép update không?
🔍 Bước 1: Kiểm tra quyền user (quan trọng nhất)
👉 Tạo file test
Tạo file check-permission.php:
<?php
require_once('wp-load.php');
if (current_user_can('update_plugins')) {
echo '✅ Có quyền update plugin';
} else {
echo '❌ KHÔNG có quyền update plugin';
}
https://domain.com/check-permission.php
📌 Kết quả
- ✅ Có quyền → chuyển bước 2
- ❌ Không có quyền → đây là nguyên nhân
🧠 Nguyên nhân mất quyền
- Role admin bị sửa
- Plugin security chặn
- Website dùng custom role
🔍 Bước 2: Kiểm tra WordPress có bị khóa update không
Mở wp-config.php, tìm:
define('DISALLOW_FILE_MODS', true);
define('AUTOMATIC_UPDATER_DISABLED', true);
📌 Ý nghĩa
| Config | Tác dụng |
|---|---|
DISALLOW_FILE_MODS |
❌ Chặn toàn bộ update plugin/theme |
AUTOMATIC_UPDATER_DISABLED |
❌ Tắt auto update |
👉 Nếu có DISALLOW_FILE_MODS = true → chắc chắn mất nút update
🔍 Bước 3: Test quyền ghi file (CỰC KỲ QUAN TRỌNG)
🧠 Vì sao?
WordPress cần ghi file để:
- tải plugin
- giải nén
- cập nhật
👉 Không ghi được = mất nút update
✅ Test nhanh bằng code
Tạo file check-write.php:
<?php
require_once('wp-load.php');
$test_file = WP_CONTENT_DIR . '/test-write.txt';
if (file_put_contents($test_file, 'test')) {
echo '✅ Có quyền ghi file';
unlink($test_file);
} else {
echo '❌ KHÔNG có quyền ghi file';
}
🔍 Test chuẩn WordPress (khuyến nghị)
<?php
require_once('wp-load.php');
global $wp_filesystem;
require_once(ABSPATH . 'wp-admin/includes/file.php');
WP_Filesystem();
if ($wp_filesystem->put_contents(WP_CONTENT_DIR . '/test.txt', 'hello')) {
echo '✅ WP có thể ghi file';
} else {
echo '❌ WP KHÔNG ghi được file';
}
❌ Nếu lỗi → fix ngay
1. Fix permission
chmod -R 755 wp-content chmod -R 644 *.php
2. Fix owner (rất quan trọng trên VPS)
chown -R www-data:www-data public_html
apachenginxnobody
3. Check PHP user
Nếu:
- file thuộc root
- PHP chạy www-data
→ chắc chắn lỗi
💡 Dấu hiệu nhận biết
| Hiện tượng | Nguyên nhân |
|---|---|
| Mất nút update | Không ghi được file |
| Bắt nhập FTP | Permission lỗi |
| Update fail | Không ghi được |
🌐 Bước 4: Kiểm tra kết nối API WordPress
🧠 Vì sao?
WordPress cần gọi:
https://api.wordpress.org
- kiểm tra version
- tải plugin
- update
✅ Test nhanh
Tạo file check-api.php:
<?php
require_once('wp-load.php');
$response = wp_remote_get('https://api.wordpress.org');
if (is_wp_error($response)) {
echo '❌ Lỗi kết nối: ' . $response->get_error_message();
} else {
echo '✅ Kết nối API OK';
}
🔍 Test chi tiết hơn
<?php
require_once('wp-load.php');
$response = wp_remote_get('https://api.wordpress.org', [
'timeout' => 10
]);
if (is_wp_error($response)) {
echo '❌ ERROR:<br>';
print_r($response);
} else {
echo '✅ HTTP CODE: ' . wp_remote_retrieve_response_code($response);
}
❌ Nếu lỗi → nguyên nhân
1. Hosting chặn outbound
- Shared hosting
- Server bảo mật cao
2. Firewall chặn port
- 80 (HTTP)
- 443 (HTTPS)
3. DNS lỗi
ping api.wordpress.org
4. Thiếu cURL / OpenSSL
Check bằng:
phpinfo();
🔥 Test nhanh bằng SSH
curl https://api.wordpress.org
💡 Dấu hiệu
| Hiện tượng | Nguyên nhân |
|---|---|
| Không thấy update | API bị chặn |
| Không cài plugin | API lỗi |
| Update fail | Không connect được |
🔍 Bước 5: Kiểm tra plugin bảo mật
Một số plugin có thể chặn:
- update plugin
- quyền admin
👉 Test nhanh:
- Tắt toàn bộ plugin → kiểm tra lại
⚡ Checklist debug nhanh (chuẩn pro)
- ✅ Test quyền user
- ✅ Check
wp-config.php - ✅ Test ghi file
- ✅ Test API WordPress
- ✅ Tắt plugin bảo mật
🎯 Kết luận
👉 Mất nút update plugin không phải lỗi random
90% do:
- ❌ thiếu quyền user
- ❌ bị khóa bằng config
- ❌ server không cho ghi file
- ❌ API WordPress bị chặn
