Hết cảnh vật lộn với plugin conflict trên Multisite: mỗi client một stack plugin riêng
WordPress Multisite thường được quảng cáo là giải pháp để chạy nhiều site khách hàng từ một bản cài đặt. Nhưng với plugin, nó lại âm thầm đi ngược lại kỳ vọng của anh em agency. Multisite share đúng MỘT thư mục wp-content và MỘT database cho tất cả subsite. File plugin nằm chung một chỗ cho cả hệ thống. Chính cái tầng share chung đó là nguồn cơn của mọi rắc rối, và dù bạn có bật tắt plugin theo từng site thì vấn đề vẫn còn nguyên.
Tại sao cơ chế quản lý plugin của Multisite dễ sinh lỗi
Trong Multisite, plugin được cài đặt trên toàn network. Sau đó bạn có hai lựa chọn: network-activate để plugin chạy ở mọi nơi, hoặc để inactive và cho phép từng site tự bật lên. Dù chọn cách nào, các file plugin vẫn bị share chung. Tất cả mã nguồn plugin đều nằm chung trong cùng một codebase cho mọi subsite.
Sự khác biệt này quan trọng hơn bạn nghĩ. “Bật cho từng site” không đồng nghĩa với “được cô lập”. Nó chỉ có nghĩa là đoạn code vật lý đó hiện diện ở mọi tenant và chỉ được kích hoạt cho một vài site. Bạn không thể cung cấp hai bộ plugin thực sự khác biệt và độc lập cho hai subsite. Nếu Client A cần plugin version 4 còn Client B bắt buộc xài version 6, Multisite sẽ không có chỗ để chứa cả hai. Chỉ một phiên bản được giữ lại, và nó sẽ áp dụng cho tất cả.
Những tình huống thực tế khiến bạn phải ôm hận
Cái tầng share chung này biến những lỗi vặt vãnh cục bộ thành sự cố lan toàn hệ thống:
- Plugin không tương thích. Client A muốn dùng một plugin booking gọi chung các filter với plugin membership của Client B. Trên các bản cài đặt riêng biệt, đây hoàn toàn không phải là vấn đề. Nhưng với Multisite, cả hai plugin cùng load trong chung một không gian tiến trình (process space), và fatal error từ một bên sẽ kéo sập cả network.
- Xung đột phiên bản. Một client đang chạy stack cũ khá ổn định và nhất quyết không chịu update plugin vì sợ hỏng custom flow của họ. Trong khi đó, client khác lại cần bản mới nhất để vá lỗi bảo mật. Trên một codebase dùng chung, bạn không thể chiều lòng cả hai.
- Bề mặt tấn công. Mọi file plugin có mặt trên network đều là code có nguy cơ bị khai thác, kể cả ở những site chưa bao giờ kích hoạt chúng. Một plugin chứa lỗ hổng bảo mật nằm im trong wp-content dùng chung vẫn được gán cho mọi subsite. Bề mặt tấn công ở đây là tổng hợp plugin của tất cả mọi người, chứ không giới hạn ở mức mỗi client.
Tất cả những rắc rối trên đều bắt nguồn từ một nguyên nhân duy nhất: dùng chung tầng plugin và theme.
Sự cô lập thực sự cho từng client trông như thế nào
Cô lập thực sự có nghĩa là plugin của một client chỉ load code cho riêng client đó. Nếu Client A cài đặt, update hoặc làm hỏng plugin, Client B vẫn hoàn toàn bình an vô sự. Cụ thể, điều này đòi hỏi:
- Mỗi client phải có một thư mục plugin riêng, chứ không phải xài chung rồi bật tắt cho từng site.
- Mỗi client có một thư mục theme riêng, giúp khoanh vùng xung đột theme và khác biệt phiên bản.
- Version độc lập, để việc giữ nguyên stack của client này không chặn đứng quá trình update của client khác.
- Phạm vi ảnh hưởng chỉ giới hạn ở mức một, nhờ đó fatal error của plugin chỉ đánh sập một tenant thay vì cả network.
Cơ chế bật theo từng site của Multisite không thể đáp ứng được bất kỳ điều kiện nào ở trên, vì bản chất các file vẫn bị share chung.
Cách wp-content riêng cho từng tenant mang lại các stack độc lập

Đây chính là khoảng trống mà GrabWP Tenancy Pro sinh ra để lấp đầy. Thay vì dùng chung một wp-content, bản Pro mang đến sự tách biệt wp-content HOÀN TOÀN cho từng tenant: thư mục plugin và theme cô lập nằm ngay trong thư mục content của họ. Mỗi client sẽ sở hữu một stack plugin và theme thực sự tách biệt, chứ không còn là một codebase chung được bật lên tắt xuống nữa.
Vì các file được tách biệt hẳn về mặt vật lý, những ca xung đột kể trên đơn giản là hết đất sống. Client A tha hồ chạy plugin version 4 trong khi Client B chạy version 6. Một plugin không tương thích sẽ chỉ load trên tenant đã cài nó. Một plugin dính lỗ hổng bảo mật nằm bên trong thư mục của một tenant sẽ không lọt vào bề mặt tấn công của bất kỳ tenant nào khác. Bản Pro cũng kết hợp tính năng này với một database MySQL hoặc SQLite dành riêng cho từng tenant, cùng khả năng backup và restore độc lập, đảm bảo dữ liệu được cô lập tương xứng với code.
Bản miễn phí của GrabWP Tenancy plugin đã giúp bạn cô lập thư mục uploads, table prefix, định tuyến subdomain hoặc subdirectory, và cung cấp một dashboard duy nhất để tạo cũng như quản lý các tenant. Tính năng wp-content độc lập hoàn toàn, nghĩa là cô lập cả plugin và theme, là một đặc quyền của bản Pro. Phiên bản miễn phí chỉ tách biệt uploads và prefix chứ không tách các file plugin hay theme, vì vậy hãy nâng cấp lên Pro khi tầng plugin là nơi bạn thường xuyên gặp rắc rối.
Quản lý nhiều stack cô lập từ một dashboard duy nhất
Nỗi lo lớn nhất khi áp dụng cô lập là bạn đang đổi từ một vấn đề này sang vấn đề khác: thay vì vật lộn với xung đột, giờ bạn phải đi trông trẻ cho hàng chục thư mục plugin riêng lẻ. Nhưng GrabWP được thiết kế để kịch bản đó không xảy ra.
Dù các stack đã bị cô lập hoàn toàn, bạn vẫn quản lý mọi tenant từ MỘT bản cài đặt WordPress và một dashboard duy nhất. Trang quản lý Extensions của Pro hiển thị trạng thái live của plugin và theme trên từng tenant, giúp bạn nắm rõ mỗi client đang chạy những gì mà không cần login vào từng site. Một directive queue từ trang chính có thể kích hoạt hoặc vô hiệu hóa plugin, đổi theme và update tùy chọn trên bất kỳ tenant nào. Cô lập không làm bạn mất đi quyền quản lý tập trung: bạn vừa có các stack riêng biệt, vừa có một nơi duy nhất để điều khiển tất cả. Các thiết lập Performance và Security cho từng tenant càng làm cho luồng công việc trên một màn hình này trở nên hoàn thiện.
Chuyển một client hay gây rắc rối sang stack riêng
Dưới đây là một quy trình cụ thể để trị những client có dàn plugin chuyên phá bĩnh network của bạn:
- Cài đặt miễn phí GrabWP Tenancy plugin trên bản WordPress của bạn và xác nhận tính năng cô lập uploads và prefix đang hoạt động ngon lành.
- Nâng cấp lên Tenancy Pro để unlock tính năng wp-content độc lập hoàn toàn cho từng tenant, sau đó tạo một tenant riêng cho client đang gặp sự cố.
- Tạo backup cho riêng tenant đó bằng tính năng backup tích hợp sẵn của Pro, để có một điểm restore sạch sẽ khi cần.
- Chuyển các plugin và theme của client vào thư mục plugin và theme cô lập của tenant đó, với đúng các version mà họ cần.
- Giữ nguyên version của họ một cách hoàn toàn độc lập, khỏi bận tâm xem các tenant khác đang chạy gì.
- Kiểm tra trên trang Extensions xem trạng thái live của plugin và theme trên tenant đã chuẩn với ý đồ của bạn chưa.
- Sử dụng directive queue từ trang chính để kích hoạt đúng các plugin và chuyển đổi theme, sau đó xác nhận rằng các tenant còn lại vẫn chạy bình thường.
Client từng là mối họa cho cả network giờ đây được đưa vào một chiếc hộp kín mà bạn vẫn có thể kiểm soát tập trung dễ dàng.
Những đánh đổi và khi nào bạn thực sự cần
Các stack trên mỗi tenant chắc chắn ngốn nhiều dung lượng đĩa hơn so với một thư mục wp-content dùng chung, bởi mỗi tenant đều vác theo bộ file plugin và theme riêng. Nếu bạn chỉ quản lý một vài site na ná nhau và đều chạy chung bộ plugin, Multisite thuần túy có thể đã đủ xài. Nếu case của bạn đúng như vậy, hãy đọc bài khi nào không nên sử dụng WordPress Multisite trước khi đắp thêm bất kỳ tầng cô lập nào.
Nhưng ngay khi client của bạn đòi hỏi các plugin khác nhau, version khác nhau, hoặc cần một bề mặt tấn công chung nhỏ hơn, cái tầng share chung kia sẽ biến thành nút thắt cổ chai, và lúc này lợi ích của việc cô lập sẽ hoàn toàn xứng đáng. Để có cái nhìn rộng hơn về cách tách biệt site của các client, bạn có thể tham khảo bài viết cách cô lập site khách hàng trên WordPress mà không cần Multisite.
Hãy bắt đầu với GrabWP Tenancy plugin hoàn toàn miễn phí để cô lập thư mục uploads, prefix và định tuyến thông qua một dashboard. Khi tầng plugin và theme chính là nơi xảy ra các lỗi đau đầu, hãy nâng cấp lên GrabWP Tenancy Pro với giá $9.99/month để tận hưởng tính năng wp-content độc lập hoàn toàn cho từng tenant. Lúc đó, mỗi client sẽ có một stack plugin và theme thực sự tách biệt mà bạn vẫn có thể quản lý gọn gàng từ trung tâm.
Câu hỏi thường gặp
- Bạn có thể cài các plugin hoàn toàn khác nhau cho hai subsite trên WordPress Multisite không?
- Khó đấy. Multisite cài các file plugin vào chung một thư mục wp-content. Bạn có thể network-activate hoặc bật riêng từng trang, nhưng plugin code vẫn được share cho mọi subsite. Bạn không thể thiết lập per site plugins wordpress multisite với hai stack plugin hoàn toàn độc lập và khác phiên bản nhau.
- Tính năng per-tenant wp-content ngăn chặn xung đột plugin như thế nào?
- Với GrabWP Tenancy Pro, mỗi tenant có thư mục theme và plugin riêng biệt nằm trong thư mục content của họ. Plugin của client nào chỉ load cho client đó, nên một plugin lỗi sẽ không kéo sập các tenant khác. Mỗi stack được tách biệt hoàn toàn chứ không phải kiểu bật tắt từ một codebase chung.
- Các stack plugin độc lập có làm mất đi khả năng quản lý tập trung không?
- Không hề. Bạn vẫn quản lý mọi tenant từ một bản WordPress và một dashboard duy nhất. GrabWP Tenancy Pro có thêm directive queue giúp site chính kích hoạt, vô hiệu hóa plugin, đổi theme và cập nhật các tùy chọn trên bất kỳ tenant nào. Nhờ vậy, quy trình wordpress multisite plugin management của bạn vẫn rất mượt mà.
Editorial standards: Our content is written by WordPress experts with hands-on multi-tenancy experience. Articles are fact-checked and regularly updated to ensure accuracy.