Sửa lỗi Parse error: syntax error trong file PHP WordPress

beginner📝 WordPress2026-03-18| WordPress 5.x–6.x, PHP 7.4–8.3, Apache/Nginx, Linux/Windows

Error Message

Parse error: syntax error, unexpected '}' in /path/to/wordpress/wp-content/plugins/my-plugin/my-plugin.php on line X
#wordpress#php#lỗi cú pháp#lỗi phân tích cú pháp

Mô tả lỗi

Bạn vừa chỉnh sửa file plugin hoặc theme, lưu lại, tải lại trang — và bây giờ bạn đang nhìn chằm chằm vào màn hình trắng hoặc thông báo này:

Parse error: syntax error, unexpected '}' in /path/to/wordpress/wp-content/plugins/my-plugin/my-plugin.php on line X

Các biến thể khác bao gồm unexpected '{', unexpected 'T_STRING'unexpected end of file. Token khác nhau, nhưng nguyên nhân gốc giống nhau: PHP không thể phân tích file vì cú pháp bị sai.

Chuyện gì đã xảy ra

PHP phân tích cú pháp toàn bộ file trước khi thực thi bất kỳ dòng nào. Chỉ cần một lỗi cú pháp ở bất kỳ đâu, nó dừng hoàn toàn — không thực thi từng phần, không có fallback.

Đây là điểm dễ nhầm lẫn nhất: số dòng trong thông báo lỗi là nơi PHP phát hiện vấn đề, không nhất thiết là nơi bạn mắc lỗi. Một dấu chấm phẩy bị thiếu ở dòng 23 có thể hiện ra thành lỗi ở dòng 31.

Nguyên nhân thường gặp:

  • Thiếu dấu chấm phẩy ở cuối dòng
  • Dấu ngoặc nhọn {} hoặc dấu ngoặc đơn () không khớp
  • Chuỗi chưa đóng (thiếu dấu nháy đóng)
  • Dán code từ Word hoặc Google Docs với dấu nháy cong thay vì dấu nháy thẳng
  • Không tương thích phiên bản PHP — ví dụ: dùng match() trên server vẫn chạy PHP 7.3
  • Copy-paste không cẩn thận làm hỏng cấu trúc code

Sửa nhanh: Khôi phục website trước

Nếu website đang down, đừng bắt đầu debug mù quáng. Khôi phục quyền truy cập trước, sau đó mới sửa lỗi.

Cách 1: Đổi tên file bị lỗi qua FTP/SSH

Đổi tên file bị lỗi để WordPress bỏ qua không tải nó:

# Qua SSH
mv wp-content/plugins/my-plugin/my-plugin.php wp-content/plugins/my-plugin/my-plugin.php.bak

Cách này vô hiệu hóa plugin ngay lập tức. Nếu file bị lỗi thuộc theme, hãy đổi tên toàn bộ thư mục theme — WordPress sẽ tự động chuyển sang theme mặc định.

Cách 2: Vô hiệu hóa plugin qua database

Không có quyền truy cập file system? Vào phpMyAdmin hoặc chạy SQL này trực tiếp:

-- Tìm các plugin đang hoạt động
SELECT option_value FROM wp_options WHERE option_name = 'active_plugins';

-- Tắt tất cả plugin cùng lúc (lựa chọn mạnh tay)
UPDATE wp_options SET option_value = 'a:0:{}' WHERE option_name = 'active_plugins';

Không tinh tế lắm — nó tắt mọi plugin đang hoạt động cùng một lúc. Nhưng nó khiến wp-admin hoạt động trở lại để bạn có thể sửa mọi thứ đúng cách.

Cách 3: WP-CLI

wp plugin deactivate my-plugin --skip-plugins --skip-themes

Tìm lỗi thực sự

Website đã lên? Mở file bị lỗi và nhảy đến số dòng trong thông báo lỗi. Sau đó kiểm tra một hoặc hai dòng phía trên — đó thường là nơi lỗi thực sự ẩn náu.

Công cụ lint tích hợp của PHP

Chạy lệnh này trước khi upload bất kỳ file PHP nào:

php -l wp-content/plugins/my-plugin/my-plugin.php

File không có lỗi:

No syntax errors detected in my-plugin.php

File có lỗi:

Parse error: syntax error, unexpected '}' in my-plugin.php on line 47
Errors parsing my-plugin.php

Chỉ mất chưa đến một giây. Có thể tiết kiệm cho bạn rất nhiều công sức upload/download qua FTP.

Các mẫu lỗi thường gặp

Thiếu dấu chấm phẩy:

// Lỗi
$price = get_post_meta($post_id, 'price', true)
echo $price;

// Đã sửa
$price = get_post_meta($post_id, 'price', true);
echo $price;

Dấu ngoặc không khớp:

// Lỗi — hai dấu ngoặc mở, chỉ đóng một
function my_function() {
    if ($condition) {
        do_something();
}

// Đã sửa
function my_function() {
    if ($condition) {
        do_something();
    }
}

Chuỗi chưa đóng:

// Lỗi
$message = "Hello, world;
echo $message;

// Đã sửa
$message = "Hello, world";
echo $message;

Dấu nháy cong do copy-paste:

// Lỗi — “” không phải ký tự phân cách chuỗi hợp lệ trong PHP
$key = “my_option_key”;

// Đã sửa
$key = "my_option_key";

Quy trình sửa lỗi triệt để

Chỉnh sửa file trực tiếp trên production là nguyên nhân đầu tiên dẫn bạn đến đây. Hãy dừng làm vậy.

1. Dùng môi trường phát triển cục bộ

# LocalWP, XAMPP, hoặc Docker
# Chỉnh sửa cục bộ, kiểm tra ở đó, chỉ triển khai khi hoạt động

2. Thêm lint PHP vào editor

VS Code: cài PHP Intelephense hoặc PHP CS Fixer. Cả hai đều đánh dấu lỗi cú pháp theo thời gian thực — trước khi bạn lưu file.

3. Pre-commit lint hook (nếu dùng Git)

# .git/hooks/pre-commit
#!/bin/bash
for file in $(git diff --cached --name-only | grep \.php$); do
    php -l "$file"
    if [ $? -ne 0 ]; then
        echo "Lỗi cú pháp PHP trong $file — commit bị hủy"
        exit 1
    fi
done

4. Bật WP_DEBUG chỉ trên môi trường staging

Thêm đoạn này vào wp-config.php trên staging — không bao giờ trên production:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Lỗi sẽ được ghi vào wp-content/debug.log thay vì làm hỏng giao diện người dùng.

Xác nhận đã sửa xong

  • Chạy php -l your-file.php — xác nhận "No syntax errors detected"
  • Kích hoạt lại plugin từ wp-admin → Plugins
  • Truy cập website — không còn màn hình trắng, không còn lỗi parse
  • Kiểm tra wp-content/debug.log xem có cảnh báo PHP nào còn lại không

Nếu lỗi vẫn tiếp tục xuất hiện

Nếu cú pháp trông ổn nhưng lỗi vẫn còn, file có thể bị hỏng do truyền FTP không đúng. Chuyển sang chế độ binary:

# Trong FTP client: đặt chế độ truyền thành Binary
# Tốt hơn là dùng SCP hoặc SFTP — chúng không thay đổi nội dung file

Cũng hãy kiểm tra xem phiên bản PHP của server có khớp với yêu cầu của plugin không. Một plugin được xây dựng cho PHP 8.0+ có sử dụng named arguments hoặc biểu thức match() sẽ gây ra parse error trên bất kỳ server PHP 7.x nào.

# Kiểm tra phiên bản PHP
php -v

# Hoặc trong WordPress
wp eval 'echo PHP_VERSION;'

Related Error Notes