Nonaktifkan tindakan plugin / plugin melalui tema

19

Saya telah menginstal plugin Google Analyticator di situs saya. Saya juga menggunakan plugin MobilePress untuk menyajikan tema yang dirancang untuk browser ponsel non-ponsel pintar. Saya telah menyiapkan Google Analytics untuk Seluler untuk digunakan dalam tema ini dan ingin menonaktifkan plugin Analyticator karena ini mencakup panggilan ke file js yang lebih besar.

Adakah yang tahu apakah mungkin untuk menonaktifkan plugin menggunakan functions.php atau metode lain?

Saya percaya saya telah menemukan kode yang menambahkan fungsi ke halaman, jadi jika itu tidak mungkin untuk menonaktifkan seluruh plugin, apakah mungkin untuk menghentikan tindakan untuk mengeksekusi? Saya telah mencoba menonaktifkannya secara langsung tanpa hasil. Berikut ini kode dari file plugin:

add_action('wp_head', 'add_google_analytics', 999999);
add_action('init', 'ga_outgoing_links');

Saya mencoba menghapus tindakan itu dengan:

remove_action('wp_head','add_google_analytics',9999999);
remove_action('init', 'ga_outgoing_links');

Setiap bantuan sangat dihargai.

PNMG
sumber
Bagi saya ini harus bekerja secara teknis, jadi ada sesuatu tentang waktu Anda menjalankan kode ini yang salah (terlalu awal atau terlalu terlambat). Harap berikan informasi lebih lanjut.
Rarst
Ya, saya pikir itu akan berhasil juga. Saya tidak punya terlalu banyak pengalaman dengan tindakan tambah / hapus jadi saya tidak yakin bagaimana cara men-debug lebih lanjut. Meskipun jawaban EAMann berhasil, informasi apa lagi yang Anda cari?
PNMG
Saya sedikit bingung - bukankah lebih mudah menonaktifkan plugin melalui cara normal jika itu perlu hilang untuk selamanya? Jawaban EAMann mana yang hanya dilakukan oleh kode. Saya berasumsi bahwa Anda menginginkannya dinonaktifkan secara dinamis dengan beberapa syarat ...
Pertama
Saya memiliki tema reguler yang diatur dalam wordpress untuk semua browser desktop normal. Untuk tema ini, saya ingin menggunakan plugin GA. Plugin mobilepress menggunakan php untuk mendapatkan string agen-pengguna dan menyajikan tema yang berbeda baik untuk ponsel pintar atau non-ponsel pintar. Saya ingin menggunakan file functions.php untuk tema non-ponsel pintar untuk menonaktifkan plugin GA dari menempatkan JS di <head> untuk tema itu saja. Itu masih harus diaktifkan untuk dua tema lainnya (desktop & ponsel pintar). Apakah itu membantu mengklarifikasi?
PNMG
Ya, itulah yang saya pikirkan. Tapi penonaktifan hanya akan menonaktifkan plugin secara terus-menerus dan akan tetap mati sampai diaktifkan secara eksplisit. Saya tidak melihatnya cocok dengan kasus penggunaan Anda.
Pertama

Jawaban:

25

Ketika WordPress mengaktifkan sebuah plugin, ia memanggil activate_plugin()fungsi tersebut. Fungsi ini mengaktifkan plugin di kotak pasir dan mengarahkan di tempat lain untuk sukses. Ini telah digunakan oleh beberapa penulis untuk secara terprogram mengaktifkan dependensi plugin.

Ada fungsi lain deactivate_plugin(),, yang melakukan hal serupa secara terbalik ... sebenarnya cara WordPress menonaktifkan plug-in ketika Anda mengklik "nonaktifkan" atau "nonaktifkan."

Untuk menonaktifkan plugin yang diinstal, cukup hubungi:

deactivate_plugins( '/plugin-folder/plugin-name.php' );

Atau, untuk menonaktifkan beberapa plugin sekaligus:

deactivate_plugins( array( '/first-plugin/first.php', '/second-plugin/second.php' ) );

Ada parameter kedua (yang pertama adalah string atau array plugin untuk menonaktifkan) yang memungkinkan Anda untuk menonaktifkan plugin tanpa memanggil kait penonaktifan. Secara default, ini disetel ke false, dan saya sarankan Anda membiarkannya seperti itu. Kecuali jika karena alasan tertentu Anda ingin memotong deaktivasi, maka Anda akan melakukan:

deactivate_plugins( '/plugin-folder/plugin-name.php', true );

Ini hanya akan mematikan plugin, tetapi itu tidak akan memecat apa pun plugin terdaftar untuk dilakukan pada penonaktifan. Jadi jika plugin menghapus opsi atau tabel db ketika dinonaktifkan, Anda ingin melakukan penonaktifan "hening" ini untuk menyimpan informasi itu dan menggunakannya di tempat lain.

EAMann
sumber
Jawaban yang bagus - dan tidak hanya dibandingkan dengan yang lain, katakanlah, loyo "inilah situs web" jawaban yang mungkin ada di suatu tempat di dekatnya.
editor
Kode ini, yang ditempatkan di functions.php akan menonaktifkan plugin di admin sehingga menonaktifkannya dari dua tema lainnya. Terima kasih Rarst untuk menunjukkan hal itu. Saya ingin menonaktifkannya hanya untuk satu tema di mana file functions.php berada.
PNMG
Anda hanya pernah menggunakan satu tema pada satu waktu di situs tertentu ... tetapi jika Anda ingin mengaktifkan kembali plugin setelah menonaktifkan tema, itu juga memungkinkan.
EAMann
11

Ini berkat jawaban brilian EAMann di atas, dan saya pikir mungkin juga bermanfaat untuk poster aslinya ...

Saya membutuhkan solusi untuk memastikan pengguna menonaktifkan plugin saya jika mereka mengunggah versi premium (untuk menghindari potensi konflik). Sebelumnya saya mendeteksi kondisinya dengan is_plugin_active dan menunjukkan pesan kesalahan admin untuk meminta pengguna mematikannya. Ini jauh lebih lancar ...

function deactivate_plugin_conditional() {
    if ( is_plugin_active('plugin-folder/plugin-name.php') ) {
    deactivate_plugins('plugin-folder/plugin-name.php');    
    }
}
add_action( 'admin_init', 'deactivate_plugin_conditional' );

Catatan: Tampaknya tidak berfungsi pada register_activation_hook, tetapi admin_init berfungsi seperti mantra.

Mark Jeldi
sumber
1
Sekadar diketahui, saya cukup yakin is_plugin_active sudah dicentang di kait deactivate_plugins sehingga tidak perlu melakukannya lagi
Bryan Willis
1

Ini solusinya, buat plugin yang bisa menonaktifkan plugin lain seperti ini:

/*
 * Plugin Name: Disable/Configure Plugins
 * Description: Lets you disable/configure plugins based on environment variables
 * Author:      Chris Sewell
 */

/**
 * Disable specified plugins in development environment.
 * 
 * This is a "Must-Use" plugin. Code here is loaded automatically before regular plugins load.
 * This is the only place from which regular plugins can be disabled programatically.
 * 
 * Place this code in a file in WP_CONTENT_DIR/mu-plugins or specify a custom location 

 * to "development" or "production" in each particular server/environment.
 */

/* Disable specified plugins in development environment */
if (((getenv('environment') == 'production') || (getenv('environment') == 'alpha')) == false) {
    $plugins = array(
        'w3-total-cache/w3-total-cache.php'
    );
    require_once(ABSPATH . 'wp-admin/includes/plugin.php');
    deactivate_plugins($plugins);
}

Dorong ini ke produksi, aktifkan, lalu bawa database ke mesin pengembang lokal Anda.

Sumber

pengguna128526
sumber