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?

rsman
sumber

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' );
sorich87
sumber
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.

Jarang
sumber
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.

jerclarke
sumber
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');
Mowshon
sumber
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

Sohel Khan
sumber