Cum se dezactivează un plugin activat la nivel de rețea doar pentru un singur site?

29 oct. 2010, 16:11:17
Vizualizări: 27.8K
Voturi: 24

Sunt în procesul de configurare a unei rețele multisite (potențial) mare și încerc să fac cât mai ușor posibil procesul de adăugare și configurare a site-urilor atunci când este necesar. În prezent, sunt în faza în care mă ocup de plugin-uri.

Cu multisite, cunosc mai multe modalități diferite prin care poți activa plugin-urile:

  • Pune plugin-ul în /plugins, activează-l pe fiecare site individual
  • Pune plugin-ul în /plugins, folosește 'network activate' pentru a-l activa pe toate site-urile
  • Pune plugin-ul în /mu-plugins, activat automat pe fiecare site

Acum, m-am jucat cu setările și vreau să activez Akismet pe toate site-urile cu excepția unuia sau două. Am crezut că voi putea activa plugin-ul la nivel de rețea și apoi să-l dezactivez pe un singur site, dar nu pot face acest lucru - dacă folosesc activarea la nivel de rețea, există doar opțiunea de 'network deactivate' - care dezactivează plugin-ul pe toate site-urile.

Există vreo modalitate de a avea funcționalitatea utilă a activării la nivel de rețea, dar în același timp să păstrez convenabilitatea de a putea dezactiva plugin-urile site cu site?

0
Toate răspunsurile la întrebare 8
10
34

Puteți utiliza filtrul site_option_*.

De exemplu, următorul cod va dezactiva Akismet pe blogul cu ID-ul 2.

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;
}
29 oct. 2010 18:35:05
Comentarii

+1 pentru oferirea unei soluții curate la nivel de PHP care rezolvă problema în cauză fără a fi nevoie să instalezi un plugin suplimentar -- pentru că sunt un maniac al purității și iubesc WordPress cât mai curat și fără plugin-uri! :]

trejder trejder
12 nov. 2012 12:14:56

Am pus acest cod într-un fișier PHP în mu-plugins și funcționează perfect!

bgallagh3r bgallagh3r
4 dec. 2015 14:02:04

Este bine de știut că acest lucru nu va funcționa cu adevărat într-o temă. Trebuie rulat mai devreme, așa că mu-plugins este un loc minunat pentru asta. S-ar putea să funcționeze ca un plugin, dar aș opta pentru mu-plugins dacă nici asta nu funcționează.

Jake Jake
7 ian. 2016 06:22:49

De asemenea, acest filtru este rulat FOARTE DES, aș recomanda să verifici dacă indexul din array este setat înainte de a-l elimina. După prima rulare, va încerca în continuare pe un array în care acel element nu mai există. if ( isset($value['akismet/akismet.php']) ) { unset($value['akismet/akismet.php']); }

Jake Jake
7 ian. 2016 06:24:13

Încă funcționează perfect pe versiunea 4.9.4.

Jake Jake
15 feb. 2018 00:29:48

De fapt. Această metodă nu funcționează dacă site-ul tău este primul site (ID: 1). În acest caz, nu îți va permite să activezi plugin-ul în rețea. Orice alt ID pare să funcționeze.

Jake Jake
20 feb. 2018 07:41:59

Încă puțin încercare și eroare. Dacă dezactivezi pe site-ul cu ID = 1, le poți activa la nivelul întregii rețele, dar nu vor apărea ca activate la nivel global în setările de rețea. Totuși, ar trebui să fie active pe site-uri. Salvarea setărilor plugin-urilor la nivel global ar putea să le dezactiveze din nou... Nu sunt sigur.

Jake Jake
20 feb. 2018 08:10:07

Se pare că nu mai funcționează. Plugin-ul apare ca dezactivat în lista de plugin-uri, dar în continuare rulează normal.

Vincent Poirier Vincent Poirier
26 apr. 2020 00:36:24

Funcționează bine cu versiunea 5.4.1.

Feriman Feriman
2 iun. 2020 00:06:15

Am adăugat acest lucru în mu plugins, dar nu activează deloc pluginul. Funcționează încă în 2023?

Demian Demian
8 mar. 2023 19:04:53
Arată celelalte 5 comentarii
1

Acest plugin: http://firestats.cc/wiki/WPMUPluginCommander

ocolește activarea în rețea și își face propria activare. De asemenea, îți permite să dezactivezi pluginul pe fiecare site individual.

Actualizare: Se pare că acest plugin intră în conflict cu pluginul sitewide tags, așa că fiți atenți înainte de a-l încerca pe o rețea de producție.

29 oct. 2010 19:05:32
Comentarii

https://wordpress.org/plugins/plugin-commander/ - URL-ul s-a schimbat. Deși acest plugin nu a mai fost actualizat de ani de zile până acum...

Jake Jake
7 ian. 2016 06:38:13
1

Iată ce a funcționat pentru mine pentru a dezactiva un plugin pentru o anumită temă într-o instalație multisite / multiteme. Am adăugat aceste câteva linii la începutul fișierului functions.php din tema mea:

/**
 * Dezactivează pluginul fancybox pentru această temă, deoarece strică javascript-ul
 */
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' );
29 mai 2013 22:26:58
Comentarii

Sunt destul de sigur că acest lucru va funcționa doar pe mu-plugins, ceea ce este destul de limitativ. Aș face asta pe init ca @GDR.

Jake Jake
7 ian. 2016 06:35:06
0

Plugin-urile active sunt stocate în tabelul wp_[blog_id]_options în câmpurile 'active_plugins' și 'active_sitewide_plugins' din wp_[blog_id]_sitemeta. Acestea sunt câmpuri serializate, așa că nu le editați decât dacă știți ce faceți.

De asemenea, aruncați o privire la wp-admin\plugin.php. Ar trebui să fie posibil să scrieți un plugin care să facă ceea ce doriți folosind funcțiile declarate acolo, cum ar fi is_plugin_active() și activate_plugin().

Totuși, presupun că sunteți priceput în PHP, ceea ce poate să nu fie cazul.

29 oct. 2010 17:22:13
4

Răspunsurile de la sorich87 și user33465 nu au funcționat pentru mine în WordPress 4.3. Adăugând acest cod în functions.php al temei a funcționat:

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' );
22 oct. 2015 14:07:38
Comentarii

Pot confirma că soluțiile votate anterior nu mai funcționează și că soluția propusă de @gdr funcționează într-adevăr.

User User
23 oct. 2015 06:00:04

Pot confirma că soluția lui @sorich87 funcționează excelent în versiunea 4.4.1. Pare că voi nu o folosiți într-un mod corect, dar ea încă funcționează. Totuși, probabil că poate funcționa doar în mu-plugins și cu siguranță nu în tema. Această opțiune va funcționa în teme. Dar rețineți că aceasta forțează dezactivarea unui plugin, în timp ce soluția lui sorich87 doar oprește forțarea acestuia pe site, dar încă permite utilizarea lui normal dacă se dorește. Prefer ultima variantă, dar ambele pot fi utile.

Jake Jake
7 ian. 2016 06:31:54

De fapt, metoda soluției lui @sorich87 nu funcționează dacă site-ul tău este primul site (ID: 1). În acest caz, nu îți va permite să activezi plugin-ul în rețea. Orice alt ID pare să funcționeze.

Jake Jake
20 feb. 2018 07:42:12

Și această metodă face același lucru pentru mine. Nu mai poți activa plugin-urile pe întreg site-ul dacă acest lucru este în tema pentru site-ul cu ID = 1.

Jake Jake
20 feb. 2018 07:54:29
0

Nu este disponibil implicit în WP 3, dar cred că ar fi posibil să suprascrii opțiunea folosind filtrele option_*.

De asemenea, ar fi minunat dacă ai adăuga sugestia ca o cerere de funcționalitate pe core.trac.wordpress.org.

29 oct. 2010 16:36:09
0

Cel mai bun mod de a gestiona toate pluginurile într-o rețea Multisite este „Plugin Commander”, pe care îl puteți găsi aici: http://wordpress.org/extend/plugins/plugin-commander/

19 mar. 2011 09:45:22
0
-1

Am reușit să dezactivez plugin-ul, dar acesta era încă prezent în panoul principal al site-ului. Singura soluție pe care am găsit-o pentru a-l elimina complet de pe site-ul principal a fost să verific în fișierul principal.php al plugin-ului și să-l dezactivez conform acestuia:

global $current_blog;

// Disponibil doar pentru site-ul B  
if( $current_blog->blog_id == 2 ) {


    define( 'AB_PATH', __DIR__ );

    include_once 'includes.php';

    // Încărcare funcționalități plugin  

    AB_Plugin::registerHooks();

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

}
4 feb. 2016 12:31:43