Yalnızca bir site için ağ etkin bir eklenti nasıl devre dışı bırakılır?


22

(Potansiyel olarak) büyük bir çok bölgeli ağ kurma sürecindeyim ve gerektiğinde siteleri eklemeyi ve yapılandırmayı mümkün olduğunca kolaylaştırmak için çalışıyorum. Şu anda eklentilerle uğraştığım aşamadayım.

Multisite ile eklentileri aktif hale getirmenin birkaç farklı yolunun farkındayım

  • Eklentiyi yerleştirin /plugins, her sitede tek tek etkinleştirin
  • Eklentiyi yerleştirin /plugins, tüm sitelerde etkinleştirmek için 'network activate' kullanın
  • Eklentiyi /mu-pluginstakın, her sitede otomatik olarak etkin

Şimdi, ayarlarla oynuyorum ve tüm sitelerde etkinleştir Akismet istiyorum ama bir ya da iki. Eklentiyi ağ üzerinden etkinleştirebileceğimi ve sonra tek bir sitede devre dışı bırakabileceğimi düşündüm, ancak bunu yapamam - eğer ağ etkinleştirme kullanırsam o zaman sadece 'ağ devre dışı bırakma' seçeneği vardır - bu eklentiyi genelinde devre dışı bırakır. tüm siteler

Ağın kullanışlı işlevselliğini etkinleştirmenin ancak yine de eklentileri site bazında devre dışı bırakmanın kolaylığına sahip olmanın bir yolu var mı?

Yanıtlar:


31

Filtreyi kullanabilirsiniz site_option_*.

Örn: aşağıdakiler, kis 2 ile blogda akismet'i devre dışı bırakacaktır.

add_filter('site_option_active_sitewide_plugins', 'modify_sitewide_plugins');

function modify_sitewide_plugins($value) {
    global $current_blog;

    if( $current_blog->blog_id == 2 ) {
        unset($value['akismet/akismet.php']);
    }

    return $value;
}

1
Ekstra eklenti yüklemeye gerek kalmadan söz konusu sorunu çözen temiz, PHP düzeyinde bir çözüm sağlamak için +1 - çünkü ben saf bir manyakım ve Wordpress'i olabildiğince temiz ve eklenti olmadan seviyorum! :]
trejder

1
Bir PHP dosyasına bu kodu düştü mu-pluginsve bir rüya gibi çalışıyor!
bgallagh3r

Bunun gerçekten bir temada işe yaramayacağını not etmek güzel. Daha erken çalıştırılması gerekiyor, yani mu-plugins bunun için harika bir yer. Eklenti olarak çalıştırılabilir, ancak bu işe yaramazsa mu-eklentileri için çekim yapardım.
Jake

1
Ayrıca, bu filtre bir LOT çalıştırır, dizideki dizinin ayarını kaldırmadan önce ayarlanmış olup olmadığını kontrol ederim. İlk defadan sonra, o maddenin bulunmadığı bir dizi üzerinde çalışmaya devam edecek. if ( isset($value['akismet/akismet.php']) ) { unset($value['akismet/akismet.php']); }
Jake

1
Bu, 4.9.4'te hala harika çalışıyor.
Jake,

3

Bu eklenti: http://firestats.cc/wiki/WPMUPluginCommander

ağ aktivasyon öğelerini atlar ve kendi işlemini yapar. ve eklentiyi site bazında siteden devre dışı bırakmanıza izin verir.

Güncelleme: Bu eklenti sitenin kenarındaki etiket eklentisini kırıyor gibi görünüyor, bu yüzden bir üretim ağında denemeden önce dikkatli olun.


wordpress.org/plugins/plugin-commander - URL değiştirildi. Bu eklenti yıllardır bu noktada güncellenmemiş olsa da ...
Jake

3

Burada, multisite / multitheme kurulumunda belirli bir tema için bir eklentiyi devre dışı bırakmam için çalıştı. Bu birkaç satırı, temamda functions.php dosyasının en üstüne ekledim:

/**
 * Disable fancybox plugin for this theme, it breaks javascript
 */
function deactivate_plugin_conditional() {
    if ( is_plugin_active('fancybox-for-wordpress/fancybox.php') ) {
        deactivate_plugins('fancybox-for-wordpress/fancybox.php');
    }
}
add_action( 'muplugins_loaded', 'deactivate_plugin_conditional' );

Bunun sadece oldukça sınırlayıcı olan mu-eklentileri üzerinde çalışacağından eminim. Bunu init@GDR gibi yapardım.
Jake

2

Aktif eklentiler, 'active_plugins' alanındaki wp_ [blog_id] _options ve wp_ [blog_id] _sitemeta 'daki' active_sitewide_plugins 'alanında saklanır. Bunlar serileştirilmiş alanlardır, bu nedenle ne yaptığınızı bilmiyorsanız düzenleme yapmayın.

Ayrıca wp-admin \ plugin.php dosyasına bakınız. Burada açıklanan fonksiyonları kullanarak istediğinizi yapacak bir eklenti yazmak mümkün olmalıdır, örneğin is_plugin_active () ve activate_plugin ().

Ancak, PHP'nin durumunun yetmeyebileceğini varsayıyorum.


2

Sorich87 ve user33465'ten gelen cevaplar benim için Wordpress 4.3 ile işe yaramadı. Bunu temaların işlevlerine eklemek. Php çalıştı:

function deactivate_plugin_conditional() {
    $deactivated_plugin_name = 'lazy-load/lazy-load.php';
    deactivate_plugins($deactivated_plugin_name, false, true);
}
add_action( 'init', 'deactivate_plugin_conditional' );

Daha önce geliştirilmiş olan çözümlerin artık çalışmadığını ve @gdr'nin çözümünün gerçekten işe yaradığını onaylayabilirim.

@ Sorich87'nin çözümünün 4.4.1'de harika çalıştığını doğrulayabilirim. Siz beyler görünüşte çalışacak şekilde kullanmıyorsunuz ama yine de çalışıyor. Ancak, muhtemelen sadece mu-eklentilerinde çalışabilir ve kesinlikle temada değil. Bu seçenek temalarda çalışacaktır. Ancak bunun, siteye zorla gelmeyi durduran ancak istenirse normal şekilde kullanılmasına izin veren sorich87'lere karşı bir eklentiyi zorladığına dikkat edin. İkincisini tercih ederim, ancak ikisi de yararlı olabilir.
Jake

Aslında. @ sorich87'nin çözüm yöntemi, siteniz ilk site ise işe yaramaz (ID: 1). Bu durumda, eklentiyi Ağ Etkinleştirmenize izin vermez. Başka bir kimlik çalışıyor gibi görünüyor.
Jake,

Ve bu yöntem benim için aynı şeyi yapar. Bu, ID = 1 adresindeki sitenin temasındaysa, eklentileri sitenizde artık etkinleştiremezsiniz
Jake

0

WP 3'teki kutudan çıkarılmadı, ancak seçenek_ * filtrelerini kullanarak seçeneği geçersiz kılmak mümkün olacağını düşünüyorum.

Ayrıca, önerinizi core.trac.wordpress.org adresinde bir özellik isteği olarak eklerseniz çok iyi olur.



-1

Eklentiyi devre dışı bırakmayı başardım ancak ana site panelinde hala oradaydı. Tamamen ana siteden kaldırdığımı bulduğum tek çözüm sitenin eklentisinin main.php'sini kontrol etmek ve buna göre devre dışı bırakmaktı:

global $current_blog;

// Only available to B
if( $current_blog->blog_id == 2 ) {


    define( 'AB_PATH', __DIR__ );

    include_once 'includes.php';

    //  plugin loaded stuff

    AB_Plugin::registerHooks();

    is_admin() ? new AB_Backend() : new AB_Frontend();

}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.