Dapatkan jalur ke plugin lain

10

Untuk mendapatkan jalur ke plugin yang dapat Anda gunakan plugin_dir_path(__FILE__)- tetapi ini jelas harus dipanggil dari dalam plug-in.

Bagaimana Anda dapat andal mendapatkan jalur ke plugin B ( pluginb/pluginb.php) dari dalam plug-in A?

Sunting: Diasumsikan Anda tahu siput plug-in yang Anda kejar (sebenarnya Anda bisa mendapatkannya dari get_plugins()). Tapi saya ingin itu berfungsi secara umum.

Stephen Harris
sumber
Apakah ini berlaku untuk plugin apa saja? atau satu / beberapa khususnya? Jika yang terakhir, apakah itu rilis Anda sendiri, atau publik?
TheDeadMedic
Jadi saya berasumsi Anda tahu siput plug-in yang Anda cari: misalnya pluginb/pluginb.php, tetapi pihak ketiga.
Stephen Harris

Jawaban:

9

Tebakan terbaik saya adalah:

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

return $dir;

Namun, bahayanya di sini masih asumsi "nama dasar" plugin - plugin yang ditulis dengan baik masih akan berfungsi bahkan ketika direktori dan / atau file utamanya telah diganti namanya (untuk alasan apa pun).

Yang kembali ke komentar asli saya - tergantung pada plugin pihak ketiga mana yang dirujuk, banyak penulis menentukan metode / konstanta mereka sendiri untuk menahan path plugin - masuk akal untuk memeriksa keberadaan mereka & menggunakannya sebagai gantinya (jika tersedia ).

TheDeadMedic
sumber
Ah ok, saya sudah memperbarui pertanyaannya :). Anda bisa mendapatkan siput plug-in dari get_plugins()- dalam kasus penggunaan saya ada cukup. Jika Anda mencari beberapa plug-in tertentu, dan tidak ada yang lebih baik tersedia, saya kira Anda dapat mencari plug-in melalui nama di get_plugins().
Stephen Harris
+1 Idealnya ingin menghindari penggunaan konstanta - tetapi solusi ini setidaknya memeriksa ketika menggunakannya :) - dan bagaimana inti melakukan sesuatu.
Stephen Harris
2

Jadi salah satu metode adalah memanggil plugin_dir_path()dalam plug-in saat ini dan mengganti nama direktori plugin Anda dengan slug dari plug-in yang Anda cari ( pluginb/pluginb.php):

Jadi dalam plug-in kami plugina/plugina.php,

$plugin_b = str_replace('plugina/','pluginb/pluginb.php',plugin_dir_path(__FILE__));
echo $plugin_b; //Prints path/to/pluginb/pluginb.php';
Stephen Harris
sumber
Saya akan menyarankan hal ini, karena ada asumsi bahwa plugin B berada di direktori yang sama dengan A (yang tidak akan menjadi masalah, seperti plugin MU).
TheDeadMedic
Terima kasih, saya pikir akan ada sesuatu yang akan saya lewatkan :)
Stephen Harris