it-swarm-id.com

fungsi is_plugin_active tidak ada

Saya menggunakan WordPress 3.0.5 dan telah diuji dengan 3.1rc4. Dalam file PHP utama plugin saya, ketika saya mencoba menelepon is_plugin_active, saya mendapatkan Call to undefined function is_plugin_active(). Saya dapat memanggil add_action dan add_filter. Apa yang harus saya periksa/ubah untuk memperbaikinya?

Ini terjadi di dalam admin pada halaman Plugin. Di bagian atas file plugin utama saya, if (function_exists('is_plugin_active')) { yang selalu mengembalikan false.

Saya juga tidak dapat melihat fungsi dari file plugin utama saya di plugin lain (jika itu membantu).

13
Carl

Itu karena file yang is_plugin_active () didefinisikan - wp-admin/includes/plugin.php - hanya dimuat di admin, setelah plugin Anda dimuat.

Dengan demikian, Anda hanya dapat memanggilnya setelah 'admin_init' dipecat:

function check_some_other_plugin() {
  if ( is_plugin_active('some-plugin.php') ) {
    ...
  }
}
add_action( 'admin_init', 'check_some_other_plugin' );
23
scribu

Anda dapat memanggil is_plugin_active () di templat dan dari halaman pengguna juga, yang dapat berguna untuk plugin terkait (yaitu memerlukan plugin 'xyz' untuk mengoperasikan plugin baru saya). Anda harus secara manual memasukkan file plugin.php seperti yang tercantum dalam dokumen is_plugin_active () pada Codex.

Berikut adalah contoh fungsional yang saya gunakan dalam paket add-on premium saya untuk memastikan plugin basis gratis aktif sebelum memanggil objek add-on. Ini membutuhkan kait & filter tertentu untuk tersedia di plugin dasar atau akan macet.

include_once(ABSPATH.'wp-admin/includes/plugin.php');
if (!function_exists('is_plugin_active') || !is_plugin_active('store-locator-le/store-locator-le.php')) { 
   return;
}

Selain itu, jika Anda mengalami masalah dengan is_plugin_active () dari dalam login admin aktif, kemungkinan karena Anda menguji sebelum admin_init kebakaran. admin_menu diaktifkan sebelum admin_init dan melakukan tes di admin_menu telah "menggigit" saya sebelumnya. Nama "admin_init" yang tampaknya kontra-intuitif bagi saya karena admin_menu sudah dijalankan. Saya menganggap init sebagai "hal pertama yang harus dijalankan" ... mungkin admin_kinda_init () akan lebih baik. :)

9
Lance Cleveland

Solusi cepat dan kotor adalah untuk menduplikasi fungsi secara manual:

function is_plugin_active( $plugin ) {
    return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}

Ini cukup pendek sehingga seharusnya tidak terlalu sulit untuk diterapkan dalam kode Anda sendiri sebagai solusinya.

8
Tom Auger

Sederhana dan mudah. Diambil dari WP

if ( ! function_exists( 'is_plugin_active' ) )
     require_once( ABSPATH . '/wp-admin/includes/plugin.php' );

dan kemudian setiap contoh

 if ( is_plugin_active( 'feed-them-social/feed-them.php' ) ) {

   }

periksa fungsinya. SO tidak ada lagi kesalahan.

4
Spencer Labadie

Saya lebih suka jawaban Tom Auger dengan cara mendefinisikan fungsi is_plugin_active Anda sendiri daripada menyertakan plugin.php. Namun, menggunakan nama fungsi yang sama menyebabkan area admin saya mogok. Menggunakan nama fungsi yang berbeda menyelesaikannya:

function is_plugin_active_byme( $plugin ) {
    return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}
3
Jeroen

Untuk debug plugin aktif:

var_dump(get_option(...));

Untuk memeriksa plugin tertentu:

in_array(get_option(...));

Tindakan ini disebut "active_plugins" IIRC.

1
hakre

Apakah Anda menggunakan is_plugin_active di dalam admin atau front-end? Saya cukup yakin bahwa is_plugin_active hanya fungsi admin yang ditemukan di dalam wp-admin/include/plugin.php.

Selain itu, apakah file plugin utama Anda menggunakan Wordpress File Header ? Apakah plugin Anda dimasukkan setelah file plugin.php di atas dimuat?

1
Jonnybojangles

Tidak satu pun dari solusi ini yang bekerja untuk saya, tetapi ini berhasil:

include_once('wp-admin/includes/plugin.php');

Saya menemukan solusi ini di codebangers.com

0
fenderflip