Tất cả các tài liệu tôi đã gặp thảo luận về chức năng ghi đè thông qua plugin của bạn.
Nếu bạn đang phát triển chủ đề thì sao?
Hàm của tôi.php yêu cầu một tệp khác ghi đè get_user_by()
hàm, được xác định trong pluggable.php
.
Nếu tôi bỏ qua if( function_exists() )
cuộc gọi, tôi sẽ gặp lỗi "Không thể xác định lại ...".
Nếu tôi bao gồm if( function exists() )
cuộc gọi, thì tôi không gặp lỗi, nhưng tất nhiên chức năng của tôi sẽ bị bỏ qua, vì phiên bản có thể cắm được tồn tại.
Dựa trên bài đăng tuyệt vời của Dominic về thứ tự khởi động WordPress , rõ ràng nó pluggable.php
được tải trước chủ đề của bạn functions.php
và vv, để giải thích lỗi.
Vì vậy, câu hỏi là - làm thế nào bạn có thể tận dụng kiến trúc có thể cắm tốt đẹp đó từ bên trong một chủ đề, mà không cần dùng đến các plugin mà sau đó phải được gói hoặc cài đặt với chủ đề?
Ghi chú thêm : Vì vậy, có vẻ như đối số là các chủ đề không nên cố gắng làm những gì plugin làm. Nhưng lập luận đó đã hơn bốn năm tuổi (theo số trac gồm 4 chữ số). Tôi rất muốn nghe từ một số người tuyệt vời cho dù triết lý này vẫn được áp dụng, với cấu trúc liên kết phức tạp của bối cảnh phát triển chủ đề ngày nay. Tôi muốn tin rằng chúng tôi đã phát triển kể từ đó.
Bối cảnh : Tôi đang phát triển giải pháp CMS một lần cho khách hàng, với rất nhiều siêu dữ liệu tùy chỉnh, tùy chỉnh back-end của Quản trị viên, quy trình đăng nhập / xác thực, các công việc. Và tất nhiên, có thành phần thiết kế - đó là nơi phần chủ đề xuất hiện. Thực tế, đây đơn giản là những thành phần không thể tái sử dụng - chúng sẽ không bao giờ áp dụng cho khách hàng khác, chúng sẽ không bao giờ được đặt dưới GPL và mở nguồn, và chúng hầu hết chắc chắn không được phân phối / cài đặt trên các triển khai WordPress khác. Tốt nhất là có một số thực tiễn tốt nhất tôi sẽ tận dụng cho các dự án trong tương lai, nhưng đó sẽ hoàn toàn là một công việc tham khảo / sao chép-dán.
Điều này không giống như trường hợp sử dụng cho các plugin đối với tôi. Chủ đề đã được cài đặt, có thể là chủ đề con của Twenty Eleven, có thể là độc lập, các hàm của nó gọi trong một khối thuyền bao gồm, mỗi xử lý một khía cạnh khác nhau của CMS. Sau đó, các tệp mẫu chủ đề sử dụng 'thẻ mẫu' tùy chỉnh được xác định trong bao gồm. Tôi không muốn có các tệp chủ đề với các phụ thuộc vào một số plugin hoặc khác được kích hoạt, v.v. Điều đó không có nghĩa gì để xây dựng sự phức tạp vào hệ thống. Chắc chắn, tôi có thể đặt nó trong thư mục plugin phải sử dụng, nhưng vẫn cảm thấy như một bản hack - ngay bây giờ, mọi thứ phải làm với các tùy chỉnh được thực hiện cho dự án này đều được chứa trong đó wp-content/themes/my-theme/
. Tôi cũng không muốn phải xem xét tìm kiếm nội dung trong một số thư mục bổ trợ.
Đừng hiểu lầm tôi. Tôi yêu các plugin và tôi sử dụng chúng và viết chúng. Và tôi sử dụng các plugin kết hợp với loại phát triển chủ đề tùy biến cao này khi plugin là bên thứ ba và thể hiện các thực tiễn tốt nhất vượt xa những gì tôi có thể đưa ra trong một khung thời gian hợp lý. Nhưng khi tôi cần sửa đổi chức năng cốt lõi cho kịch bản một lần, tôi chuyển sang móc hành động, móc lọc và tôi muốn có thể dựa vào các chức năng có thể cắm cho người dùng và cả mặt xác thực của mọi thứ.