it-swarm-eu.dev

Jak zakázat plugin povolený pro síť pouze pro jeden web?

Jsem v procesu nastavování (potenciálně) rozsáhlé sítě s více stanicemi a snažím se, aby bylo možné v případě potřeby přidat a nakonfigurovat stránky. Momentálně jsem ve fázi, kdy se zabývám pluginy.

S multisite jsem si vědom několika různých způsobů, jak aktivovat pluginy

  • Vložte plugin do /plugins, aktivujte jej na všech stránkách invidually
  • Vložte plugin do /plugins, použijte 'network aktivovat' pro aktivaci na all sites
  • Vložte plugin do /mu-plugins, automaticky aktivovaného na všech stránkách

Hrál jsem s nastavením a chci aktivovat Akismet na všech stránkách ale jeden nebo dva. Myslel jsem, že budu moci aktivovat plugin a pak ho vypnout na jednom webu, ale nemohu to udělat - pokud používám aktivaci sítě, pak je zde pouze možnost „deaktivovat síť“ - která deaktivuje plugin napříč všechny stránky.

Existuje způsob, jak mít praktickou funkčnost sítě aktivovat, ale přesto mít pohodlí, že jsou schopni deaktivovat pluginy na webu po stránce?

21
nobody

Můžete použít filtr site_option_*.

Např. následující zakáže akismet na blogu s id 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;
}
28
sorich87

Zde je to, co pro mě fungovalo, abych vypnul plugin pro jedno konkrétní téma na instalaci s více stanicemi/multitheme. Přidal jsem těchto několik řádků v horní části souboru functions.php v mém motivu:

/**
 * 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' );
3
user33465

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

obchází síťové aktivace a provádí své vlastní. a umožňuje zakázat plugin na webu podle webu.

Aktualizace: Vypadá to, že tento plugin rozbije plugin pro webové stránky, takže buďte opatrní před pokusem o produkční síť.

3
andrea_r

Aktivní pluginy jsou uloženy v wp_ [blog_id] _options v poli 'active_plugins' a 'active_sitewide_plugins' v wp_ [blog_id] _sitemeta. Jedná se o serializovaná pole, takže je neupravujte, pokud nevíte, co děláte.

Podívejte se také na wp-admin plugin.php. Mělo by být možné napsat plugin, který bude dělat to, co chcete, pomocí funkcí zde uvedených, např. is_plugin_active () a aktivovat_plugin ().

Nicméně, předpokládám, že jste zdatní v PHP, což nemusí být případ.

2
codecowboy

Odpovědi od sorich87 a user33465 nefungovaly pro mě s Wordpressem 4.3. Přidání této funkce do funkce theme.php fungovalo:

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' );
2
GDR

Není v krabici v WP 3, ale myslím, že by bylo možné přepsat volbu pomocí filtrů option_ *.

Také by bylo sladké, kdybyste návrh přidali jako požadavek na funkci v souboru core.trac.wordpress.org.

0
Denis de Bernardy

Lepší způsob, jak zpracovat všechny pluginy v síti Multisite, je "Plugin Commander", který naleznete zde: http://wordpress.org/extend/plugins/plugin-commander/

0
user4051