Nhận đường dẫn đến một plugin khác


10

Để có được đường dẫn đến một plugin bạn có thể sử dụng plugin_dir_path(__FILE__)- nhưng rõ ràng điều này phải được gọi từ bên trong plugin.

Làm thế nào bạn có thể có được đường dẫn đến plugin B ( ) một cách đáng tin cậypluginb/pluginb.php từ bên trong plugin A?

Chỉnh sửa: Giả sử bạn biết sên của trình cắm thêm sau (thực ra bạn có thể lấy chúng từ đó get_plugins()). Nhưng tôi muốn nó làm việc nói chung.


Điều này sẽ áp dụng cho bất kỳ plugin? hoặc một / một số cụ thể? Nếu sau này, chúng là của riêng bạn, hoặc phát hành công khai?
TheDeadMedic

Vì vậy, tôi cho rằng bạn biết sên của trình cắm thêm sau: vd pluginb/pluginb.php, nhưng bên thứ ba của nó.
Stephen Harris

Câu trả lời:


9

Dự đoán tốt nhất của tôi sẽ là:

if ( ! is_file( $dir = WPMU_PLUGIN_DIR . '/pluginb/pluginb.php' ) ) {
    if ( ! is_file( $dir = WP_PLUGIN_DIR . '/pluginb/pluginb.php' ) )
        $dir = null;
}

return $dir;

Tuy nhiên, mối nguy hiểm ở đây vẫn là giả định về "tên cơ sở" của plugin - một plugin được viết tốt sẽ vẫn hoạt động ngay cả khi thư mục và / hoặc tệp chính của nó đã được đổi tên (vì bất kỳ lý do gì).

Điều này quay trở lại nhận xét ban đầu của tôi - tùy thuộc vào plugin bên thứ ba nào đề cập đến, nhiều tác giả định nghĩa các phương thức / hằng số riêng của họ để giữ đường dẫn plugin - thay vào đó sẽ có ý nghĩa để kiểm tra sự tồn tại của họ và sử dụng chúng thay thế (nếu có ).


À, tôi đã cập nhật câu hỏi :). Bạn có thể lấy sên trình cắm từ get_plugins()- trong trường hợp sử dụng của tôi là đủ. Nếu bạn theo đuổi một số trình cắm cụ thể và không có gì tốt hơn, tôi đoán bạn có thể tìm kiếm trình cắm qua tên trong get_plugins().
Stephen Harris

+1 Lý tưởng nhất là tránh sử dụng các hằng số - nhưng giải pháp này ít nhất là kiểm tra khi sử dụng chúng :) - và đó là cách cốt lõi dường như làm mọi việc.
Stephen Harris

2

Vì vậy, một phương pháp là gọi plugin_dir_path()trong trình cắm thêm hiện tại và thay thế tên thư mục plugin của riêng bạn bằng tên của trình cắm của trình cắm mà bạn đang theo sau ( pluginb/pluginb.php):

Vì vậy, trong plugin của chúng tôi plugina/plugina.php,

$plugin_b = str_replace('plugina/','pluginb/pluginb.php',plugin_dir_path(__FILE__));
echo $plugin_b; //Prints path/to/pluginb/pluginb.php';

Tôi sẽ khuyên bạn điều này, vì có giả định rằng plugin B nằm trong cùng thư mục với A (không nhất thiết phải là trường hợp, các plugin của ala MU).
TheDeadMedic

Cảm ơn, nghĩ rằng sẽ có một cái gì đó mà tôi bỏ lỡ :)
Stephen Harris

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.