Bagaimana Mengaktifkan Plugin melalui Kode?


22

Jika mungkin, bagaimana plugin yang diinstal (artinya file telah ditempatkan di direktori wp-content / plugins) diaktifkan dari plugin lain?

Jawaban:


30

Inilah yang saya lakukan di beberapa aplikasi web:

function run_activate_plugin( $plugin ) {
    $current = get_option( 'active_plugins' );
    $plugin = plugin_basename( trim( $plugin ) );

    if ( !in_array( $plugin, $current ) ) {
        $current[] = $plugin;
        sort( $current );
        do_action( 'activate_plugin', trim( $plugin ) );
        update_option( 'active_plugins', $current );
        do_action( 'activate_' . trim( $plugin ) );
        do_action( 'activated_plugin', trim( $plugin) );
    }

    return null;
}
run_activate_plugin( 'akismet/akismet.php' );

1
Seperti yang ditulis Rarst, ini tidak terlalu "aman". Anda harus memastikan plugin yang Anda aktifkan dengan cara ini aman / tidak akan merusak situs Anda.
sorich87

10
Tidak aman sama sekali, bahkan, tetapi heck, jika Anda mengaktifkannya secara terprogram Anda seharusnya tahu apa yang Anda lakukan. ;-)
Denis de Bernardy

Selain keamanan - maksud saya, ini bukan bagian dari pertanyaan, bukan? - Saya suka pendekatan sorich karena ini memanggil filter aktivasi standar. Jadi plugin mendapatkan perubahan untuk menjalankan rutinitas pengaturannya jika ada.
hakre

3
Ini, setidaknya baru-baru ini, menciptakan kembali roda. Saya telah menggunakan built-in activate_plugin(), dan sepertinya berfungsi sama.
Jake

1
@SagiveSEO Sangat aman - mirip dengan cara WP melakukannya, kecuali dengan meminta input / persetujuan pengguna dan membentuk nonces dan memeriksa nonce tersebut - cukup masukkan cek yang diperlukan untuk memulai fungsi itu di mana saja - sehingga tidak dapat diakses dari luar (dari web dll), dan itu tidak dapat dipanggil secara acak dengan cara apa pun.
unity100

13

Proses aktivasi plugin dikodekan untuk berfungsi dengan antarmuka admin WP. Itu melakukan beberapa pemeriksaan untuk mencegah mengaktifkan plugin dengan kesalahan (memuat seperti pada awal mungkin merusak WP).

Ini ditangani oleh activate_plugin()fungsi ( sumber ) yang didokumentasikan sebagai tidak dapat digunakan di tempat lain.

Jadi jika Anda ingin mengaktifkan plugin dengan kode tujuannya sendiri relatif mudah - untuk mengubah active_pluginsopsi untuk memasukkan plugin itu. Tetapi Anda harus membuat kembali kait aktivasi terkait dari awal dan akan berisiko melanggar situs dengan mengaktifkan tanpa langkah kotak pasir.


7

Plugin disimpan dalam larik di opsi 'active_plugins'. Array berisi path file ke setiap plugin yang aktif.

Untuk mengaktifkan plugin Anda perlu menentukan apa jalan itu akan, maka terjadilah bahwa jalan menuju activate_plugin($plugin_path).

Ini lebih mudah diucapkan daripada dilakukan, dan (setidaknya dalam 2.9) kode inti tidak membuatnya mudah.

Sebelum Anda dapat mengaktifkan_plugin () Anda harus menyertakan file plugin.php dari wp-admin / include /. Anda juga harus memeriksa untuk memastikan plugin Anda belum aktif. Hasilnya terlihat seperti ini (YMMV):

// Define the new plugin you want to activate
$plugin_path = '/path/to/your/new/plugin.php';
// Get already-active plugins   
$active_plugins = get_option('active_plugins');
// Make sure your plugin isn't active
if (isset($active_plugins[$plugin_path]))
    return;

// Include the plugin.php file so you have access to the activate_plugin() function
require_once(ABSPATH .'/wp-admin/includes/plugin.php');
// Activate your plugin
activate_plugin($plugin_path);

Saya menggunakan ini pada produksi di WP 2.9 dan tidak memiliki masalah besar tetapi dalam pengujian saya memiliki hasil yang sangat tak terduga dengan WPMU, jadi berhati-hatilah menggunakan ini pada pemasangan jaringan.


sudah lama berlalu tetapi jika Anda ingat, apa hasil yang tidak terduga dari ini?
Ünsal Korkmaz

Saya sama sekali tidak ingat. Saya pikir itu tidak berhasil dan saya melakukan sesuatu dengan tangan karena saya tidak memiliki terlalu banyak situs MS.
jerclarke

bagaimana saya menjalankan ini? jika saya hanya menjalankannya secara langsung, get_option tidak ditentukan ...
Janus Troelsen

Tambahkan ini di functions.php dan itu akan berfungsi, meskipun demikian Anda harus selalu meletakkan sesuatu di fungsi dan mengaitkannya ke "init" atau "wp".
jerclarke

3

Wordpress menyediakan fungsi untuk mengaktifkan plugin, menurut WP Codex

function plugin_activation( $plugin ) {
    if( ! function_exists('activate_plugin') ) {
        require_once ABSPATH . 'wp-admin/includes/plugin.php';
    }

    if( ! is_plugin_active( $plugin ) ) {
        activate_plugin( $plugin );
    }
}

plugin_activation('akismet/akismet.php');

Ethan, apa yang salah dengan jawabanku?
Mowshon

Walaupun memposting kode saja tidak apa-apa untuk sebuah jawaban, mungkin sulit untuk mengartikan bagi programmer baru yang membaca jawaban Anda. Dengan cara ini, OP dapat memiliki pemahaman yang lebih baik tentang cara kerja kode Anda.
Ethan Jinks O'Sullivan

0

Anda cukup memanggil fungsi default WordPress.

activate_plugin('akismet/akismet.php');

Silakan periksa tautan di bawah ini untuk detail lebih lanjut.

aktifkan plugin

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.