Website WordPress hay bị phình theo một cách rất quen: mỗi lần cần một việc nhỏ, người quản trị gõ tìm và cài tiện ích đầu tiên hiện ra. Tắt bình luận — một tiện ích. Ẩn thanh quản trị với khách hàng — một tiện ích. Thêm đoạn mã theo dõi vào đầu trang — một tiện ích. Hai năm sau website có bốn mươi tiện ích, mười lăm cái chỉ làm đúng một việc mà vài dòng mã cũng làm được.
Mỗi tiện ích là một nguồn cập nhật phải theo dõi, một nơi có thể có lỗ hổng, thêm mã nạp ở mỗi lượt xem và một mục nữa trong menu quản trị. Bài này liệt kê những việc thường gặp có thể thay bằng mã, nơi đặt mã, và ranh giới khi nào vẫn nên dùng tiện ích.
Đặt mã ở đâu trước đã
Đừng dán vào functions.php của giao diện. Đổi giao diện là mất, và một dấu chấm phẩy thiếu làm cả website trắng. Ba chỗ hợp lý:
- wp-config.php cho các hằng số cấu hình. Đặt phía trên dòng chú thích báo dừng chỉnh sửa ở gần cuối tệp.
- Thư mục wp-content/mu-plugins cho các đoạn mã chức năng. Mỗi tệp PHP ở đây tự nạp, không thể bị tắt nhầm trong bảng quản trị.
- Một tiện ích riêng của website nếu bạn muốn bật tắt được khi khoanh vùng lỗi.
Luôn sửa qua trình quản lý tệp của hosting hoặc kết nối SFTP, không qua trình sửa tệp trong bảng quản trị. Viết sai cú pháp trong trình sửa tệp có thể khoá bạn ra ngoài và phải vào hosting mới sửa được — vậy thì vào hosting từ đầu.
Nhóm một: hằng số trong wp-config.php
Đây là nhóm dễ nhất, mỗi việc chỉ một dòng define. Vài hằng số hữu ích:
| Hằng số | Tác dụng | Thay cho |
|---|---|---|
| DISALLOW_FILE_EDIT đặt true | Tắt trình sửa tệp giao diện và tiện ích trong bảng quản trị | Tiện ích bảo mật chỉ để bật đúng tuỳ chọn này |
| WP_POST_REVISIONS đặt một số, ví dụ 5 | Giới hạn số bản lưu lại của mỗi bài | Tiện ích giới hạn bản lưu |
| AUTOSAVE_INTERVAL đặt số giây | Giãn khoảng tự động lưu nháp | Tiện ích chỉnh tự lưu |
| EMPTY_TRASH_DAYS đặt số ngày | Đổi thời gian giữ bài trong thùng rác (mặc định 30 ngày) | Tiện ích dọn thùng rác |
| WP_DEBUG_LOG đặt true, WP_DEBUG_DISPLAY đặt false | Ghi lỗi ra tệp nhật ký thay vì in ra màn hình | Tiện ích xem lỗi đơn giản |
Lưu ý với hằng số gỡ lỗi: chỉ bật khi đang tìm lỗi, xong thì tắt, và đảm bảo tệp nhật ký không đọc được từ ngoài trình duyệt. Tệp debug.log nằm trong wp-content theo mặc định; có thể chỉ đường dẫn sang chỗ khác ngoài thư mục web bằng cách gán đường dẫn tệp cho WP_DEBUG_LOG thay vì true.
Nhóm hai: bộ lọc và móc hành động một dòng
WordPress cho phép can thiệp vào gần như mọi hành vi qua móc (hook). Rất nhiều tiện ích nhỏ thực chất chỉ gọi đúng một móc. Ví dụ những việc thường gặp:
- Ẩn thanh quản trị ngoài trang với người không phải quản trị viên: dùng bộ lọc show_admin_bar, trả về false khi người dùng không có quyền quản lý tuỳ chọn.
- Tắt XML-RPC khi không dùng ứng dụng di động hay dịch vụ đăng bài từ xa: bộ lọc xmlrpc_enabled trả về false. Lưu ý cách này vẫn để PHP nạp WordPress cho mỗi lượt gọi; muốn giảm tải thật sự thì chặn tệp ở cấp máy chủ.
- Đổi độ dài đoạn tóm tắt tự động: bộ lọc excerpt_length.
- Bỏ thông báo phiên bản WordPress trong mã nguồn trang: gỡ hành động wp_generator khỏi móc wp_head.
- Tắt các biểu tượng cảm xúc tự nạp nếu website không cần: gỡ các hành động in tập lệnh và kiểu emoji khỏi wp_head và móc in kiểu.
Mỗi việc trên khoảng một đến năm dòng. Gom chúng vào một tệp trong mu-plugins, mỗi đoạn có một dòng chú thích nói nó làm gì và vì sao.
Nhóm ba: thêm mã vào đầu và cuối trang
Mã theo dõi lượt truy cập, mã xác minh quyền sở hữu, mã điểm ảnh quảng cáo — rất nhiều website cài riêng một tiện ích chỉ để chèn vài dòng vào phần đầu trang. Thay bằng hai hàm gắn vào móc wp_head và wp_footer, mỗi hàm in đoạn mã cần chèn.
Lợi ích không chỉ là bớt một tiện ích. Khi mã nằm trong tệp, nó đi theo hệ thống quản lý phiên bản của bạn, có ghi chú ai thêm, ngày nào, vì sao. Khi mã nằm trong ô cài đặt của tiện ích, sau vài năm không ai biết đoạn mã thứ ba trong ô đó là của dịch vụ nào và có còn dùng không.
Ngoại lệ: nếu người chèn mã là nhân viên tiếp thị không đụng vào tệp, một ô cài đặt trong bảng quản trị lại hợp lý hơn. Chọn theo người sẽ dùng.
Nhóm bốn: ảnh và tệp tải lên
- Thêm một cỡ ảnh cho thiết kế: hàm add_image_size trong móc after_setup_theme. Nhớ chạy lại việc tạo ảnh thu nhỏ cho ảnh cũ nếu cần.
- Bỏ các cỡ ảnh không dùng: bộ lọc intermediate_image_sizes_advanced, gỡ các cỡ không có chỗ hiển thị. Mỗi cỡ bỏ đi là một tệp ít hơn cho mỗi ảnh tải lên.
- Ngưỡng ảnh lớn: WordPress tự thu nhỏ ảnh tải lên quá cỡ theo một ngưỡng mặc định; đổi ngưỡng bằng bộ lọc big_image_size_threshold.
- Cho phép thêm loại tệp: bộ lọc upload_mimes. Cẩn thận với SVG — tệp SVG có thể chứa mã chạy được, chỉ cho phép khi có bước làm sạch tệp.
Khi nào vẫn nên cài tiện ích
Tự viết mã không phải lúc nào cũng tốt hơn. Nên dùng tiện ích khi:
- Việc có nhiều trường hợp biên. Biểu mẫu liên hệ cần chống rác, kiểm tra dữ liệu, gửi thư, lưu bản ghi. Tự viết được, nhưng tiện ích tốt đã xử lý hàng chục ca bạn chưa nghĩ tới.
- Việc liên quan bảo mật hoặc tiền. Thanh toán, mã hoá, xác thực hai lớp — dùng mã đã được nhiều người kiểm tra.
- Người không biết mã cần tự chỉnh. Chuyển hướng đường dẫn là ví dụ: nhân viên nội dung cần thêm chuyển hướng mỗi tuần, một giao diện quản lý tốt hơn việc bắt họ sửa tệp.
- Việc cần cập nhật theo bên ngoài. Kết nối với dịch vụ có giao diện lập trình thay đổi thường xuyên; để nhà phát triển tiện ích theo dõi giúp.
Phép thử gọn: nếu đoạn mã dài quá khoảng ba mươi dòng hoặc cần một trang cài đặt, hãy tìm tiện ích. Nếu chỉ vài dòng gọi một móc, tự viết.
Giữ đoạn mã tự viết khỏi thành rác
Mã tự viết cũng phình ra nếu không chăm. Ba quy ước giúp nó gọn:
- Mỗi đoạn một chú thích: làm gì, vì sao, ngày thêm, ai yêu cầu.
- Đặt tên hàm có tiền tố riêng của website, tránh trùng với hàm của tiện ích hoặc giao diện.
- Rà lại mỗi năm một lần. Đoạn mã chỉnh một lỗi của phiên bản WordPress cũ có thể không còn cần; đoạn mã gắn với dịch vụ đã ngừng dùng thì xoá.
Khi bàn giao, ghi danh sách các đoạn mã này vào tài liệu. Người tiếp quản không phải đoán vì sao thanh quản trị biến mất hay vì sao website không còn tạo ảnh cỡ trung bình.
Một tệp mẫu để bắt đầu
Với website mới, nhiều người làm nghề giữ sẵn một tệp mu-plugin mẫu gồm các chỉnh mà gần như website nào cũng cần, rồi bật tắt từng đoạn theo yêu cầu của khách. Nội dung thường gồm:
- Bỏ thông tin phiên bản WordPress khỏi mã nguồn trang và nguồn tin RSS.
- Tắt XML-RPC nếu khách không dùng ứng dụng di động để đăng bài.
- Ẩn thanh quản trị ngoài trang với vai trò không phải quản trị viên.
- Gỡ các cỡ ảnh mà giao diện không dùng.
- Thêm đoạn mã theo dõi lượt truy cập vào wp_head, có điều kiện không chạy khi người quản trị đang đăng nhập để không làm lệch số liệu.
- Đổi chữ ở chân trang trang quản trị thành tên và liên hệ của đơn vị bảo trì.
Cùng với vài dòng trong wp-config.php, tệp mẫu này thay được năm sáu tiện ích nhỏ mà website mới hay bị cài theo thói quen. Quan trọng hơn, nó giúp mọi website bạn làm có cùng một nền, khi bảo trì không phải nhớ website nào cài tiện ích gì.
Trước khi dùng một đoạn mã lấy từ mạng, đọc hiểu từng dòng. Đoạn mã cũ có thể gọi hàm đã bị bỏ, và đoạn mã không rõ nguồn có thể chèn thứ bạn không muốn.
Câu hỏi thường gặp
Dán đoạn mã vào functions.php có sao không?
Chạy được, nhưng đổi giao diện là mất và lỗi cú pháp có thể làm trắng website. Đặt trong mu-plugins hoặc một tiện ích riêng an toàn hơn.
Thư mục mu-plugins là gì?
Là thư mục wp-content/mu-plugins, nơi mọi tệp PHP được WordPress tự nạp và không thể tắt trong bảng quản trị. Phù hợp với mã chức năng do chính bạn viết.
Tắt trình sửa tệp trong bảng quản trị bằng cách nào?
Thêm hằng số DISALLOW_FILE_EDIT với giá trị true vào wp-config.php. Mục sửa tệp giao diện và tiện ích sẽ biến mất.
Khi nào nên dùng tiện ích thay vì tự viết mã?
Khi việc có nhiều trường hợp biên, liên quan bảo mật hoặc thanh toán, cần người không biết mã tự chỉnh, hoặc đoạn mã dài và cần trang cài đặt riêng.
Có nên cho phép tải tệp SVG lên không?
Chỉ khi có bước làm sạch tệp. SVG là định dạng văn bản có thể chứa mã chạy được, mở cho mọi người tải lên là rủi ro bảo mật.