Sự khác biệt giữa tệp plugin (chính) và sên của plugin là nơi mà Codex WordPress có thể làm tốt hơn nhiều. Tôi hiểu sự nhầm lẫn của bạn vì tôi đã cảm thấy nó gần đây (trộn lẫn với sự thất vọng).
Đây là những gì tôi đã học được bằng cách thực hiện một số "công việc thám tử" trên mã lõi WordPress.
Các tập tin plugin
Đây là cách duy nhất WordPress xác định và ghi lại một plugin. Nó được tạo thành từ thư mục của plugin VÀ tệp plugin chính (tệp có tiêu đề tệp chứa các chi tiết plugin khác nhau như phiên bản, tác giả, v.v.).
Nó sẽ trông giống như thế này: your-plugin-directory/main-file.php
Nếu bạn nhìn vào dữ liệu bổ trợ đang hoạt động (được trả về get_option( 'active_plugins' )
), bạn sẽ thấy rằng WordPress chỉ cần tệp plugin này để xác định đúng các plugin.
Bạn có thể chọn nghĩ về nó như là đường dẫn tương đối của tệp chính của plugin (liên quan đến wp-content/plugins/
thư mục đó). Bạn có thể "soạn" đường dẫn tuyệt đối của tệp plugin chính với nội dung như sau:trailingslashit( WP_PLUGIN_DIR ) . $plugin_main_file
Bản thân lõi tạo ra tệp plugin như thế này:
$plugin_main_file = plugin_basename( trim( $plugin_main_file_absolute_path ) );
Sên plugin
Mọi người sẽ mong đợi plugin "slug" là một loại ID được tiêu chuẩn hóa cho plugin như slug post dành cho bài viết - vì vậy bạn có thể sử dụng "slug" này để cung cấp cho các chức năng cốt lõi của WordPress và khiến mọi thứ diễn ra.
Không hẳn vậy. Sau khi tìm kiếm cốt lõi để tham khảo các sên plugin (hoặc chủ đề cho những gì quan trọng) và tìm thấy hầu như không có gì, tôi nghĩ rằng tôi đã nắm bắt được nó.
Các sên thực sự duy nhất là những thứ dành cho những thứ có thể truy cập thông qua một URL duy nhất: bài đăng, trang, phân loại, v.v. Đó là toàn bộ việc lấy tên của một cái gì đó (như tiêu đề bài đăng) và tạo một phiên bản thân thiện với URL: để sử dụng nó trong một URL.
Nhưng chúng ta sử dụng chủ đề / plugin "sên" trong URL ở đâu?
Chúng tôi không làm điều đó trên các cài đặt WordPress riêng lẻ - không phải trong quản trị viên WP hoặc frontend.
Tuy nhiên, có một nơi rất vướng mắc với mã WordPress, trang web WordPress.org. Mọi người đang gặp khó khăn trong việc phân biệt giữa hai loại, bao gồm cả việc các nhà phát triển thường thấy các chủ đề WordPress.org hoặc sên plugin nên hoạt động giống như sên bài hoặc trang.
Họ phục vụ cùng một mục đích nhưng trên các trang web riêng biệt . Trên WordPress.org, chúng được sử dụng để xác định duy nhất một chủ đề từ những người khác và một plugin từ phần còn lại (trong các URL như https://wordpress.org/plugins/akismet/
).
Nhưng khi nói đến các cài đặt WordPress riêng lẻ , tính duy nhất tương tự không thể được đảm bảo vì không có thẩm quyền để thực thi nó (như trên WordPress.org). Nó có thể hoạt động nếu tất cả các plugin và chủ đề đến từ WordPress.org, nhưng rất may đó không phải là trường hợp.
Mã WordPress làm gì với sên theme / plugin?
Mã lõi WordPress không dựa vào sên chủ đề / plugin để thực hiện những việc như cài đặt, kích hoạt, cập nhật, xóa chủ đề hoặc plugin.
Đối với chủ đề, nó phụ thuộc vào thư mục chủ đề vì điểm nhập chính vào chủ đề là style.css
tệp (bạn không thể sử dụng tệp CSS khác để giữ tiêu đề chi tiết chủ đề của mình).
Đối với các plugin, nó phụ thuộc vào thư mục plugin VÀ tệp plugin chính , vì các plugin có thể gọi tệp chính của chúng theo cách chúng thích.
Điều duy nhất mà lõi sử dụng sên chủ đề / plugin là khi nó xử lý các chủ đề và plugin từ thư mục WordPress.org: tìm nạp danh sách các plugin, kiểm tra cập nhật, báo cáo lại dữ liệu sử dụng thư mục, v.v.
Để tóm tắt mọi thứ về sên plugin: bất cứ khi nào bạn tìm thấy dữ liệu plugin với slug
mục nhập, 99% thời gian nó sẽ đề cập đến sên WordPress.org của plugin.
Làm thế nào để chúng ta đi về việc xác định các plugin?
Nếu bạn muốn lập trình kích hoạt, cập nhật, hủy kích hoạt hoặc xóa một plugin nhất định trên bản cài đặt WordPress, bạn cần sử dụng tệp plugin. Bạn có thể lấy nó như thế này từ tệp chính của plugin:
$plugin_file = plugin_basename( __FILE__ );
Nếu bạn muốn nhắm mục tiêu một plugin nhất định từ một plugin khác, mọi thứ trở nên phức tạp hơn một chút vì bạn cần phải dựa vào một chút "phỏng đoán".
Bạn có thể mã hóa tên plugin, tìm kiếm plugin trong danh sách tất cả các plugin (xem get_plugins () ) và lấy tệp plugin từ đó.
Nếu bạn biết một lớp hoặc hàm được xác định bởi plugin đó, bạn có thể sử dụng sự phản chiếu (xem câu trả lời này cho các lớp và cái này cho các hàm).
Tôi hy vọng điều này sẽ giúp bạn và những người khác có thể gặp khó khăn khi xử lý "sên plugin". Nó có thể giúp tôi tiết kiệm được một vài giờ :)