¿Cómo deshabilitar un complemento habilitado para la red para un solo sitio?

18

Estoy en el proceso de configurar una red multisitio (potencialmente) grande, y estoy buscando que sea más fácil ahora agregar y configurar sitios cuando sea necesario. Actualmente estoy en la fase en la que estoy tratando con complementos.

Con Multisite, soy consciente de varias formas diferentes de activar complementos

  • Ponga el complemento en /plugins , actívelo en todos los sitios de manera inidual
  • Ponga el complemento en /plugins , use 'red active' para activarlo en todos sitios
  • Coloque el complemento en /mu-plugins , se activará automáticamente en cada sitio

Ahora, he estado jugando con la configuración y quiero activar Akismet en todos los sitios pero uno o dos. Pensé que sería capaz de activar el complemento en red y luego desactivarlo en un solo sitio, pero no puedo hacerlo. Si uso la activación por red, solo existe la opción de 'desactivar la red' - que desactiva el complemento a través de todos los sitios.

¿Hay alguna forma de activar la funcionalidad práctica de la red, pero aún así tener la conveniencia de poder desactivar los complementos sitio por sitio?

    
pregunta nobody 29.10.2010 - 15:11

8 respuestas

26

Puedes usar el filtro site_option_* .

Por ejemplo, lo siguiente deshabilitará akismet en el blog con el 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;
}
    
respondido por el sorich87 29.10.2010 - 17:35
2

Este plugin: enlace

pasa por alto las cosas de activación de la red y hace lo suyo. y le permite deshabilitar el complemento sitio por sitio.

Actualización: parece que este complemento rompe el complemento de etiquetas de todo el sitio, así que ten cuidado antes de probar en una red de producción.

    
respondido por el andrea_r 29.10.2010 - 18:05
2

Esto es lo que me funcionó para deshabilitar un complemento para un tema en particular en una instalación multisitio / multitema. Agregué estas pocas líneas en la parte superior del archivo functions.php en mi tema:

/**
 * 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' );
    
respondido por el user33465 29.05.2013 - 21:26
2

Las respuestas de sorich87 y user33465 no me funcionaron con Wordpress 4.3. Agregando esto a las funciones de theme.php trabajado:

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' );
    
respondido por el GDR 22.10.2015 - 13:07
1

Los complementos activos se almacenan en las wp_ [blog_id] _options en el campo 'active_plugins' y 'active_sitewide_plugins' en wp_ [blog_id] _sitemeta. Estos son campos en serie, así que no los edite a menos que sepa lo que está haciendo.

También eche un vistazo a wp-admin \ plugin.php. Debería ser posible escribir un complemento que haga lo que usted quiere usando las funciones declaradas allí, por ejemplo. is_plugin_active () y active_plugin ().

Sin embargo, presupongo que usted es competente en PHP, lo que puede no ser el caso.

    
respondido por el codecowboy 29.10.2010 - 16:22
0

No está listo para usar en el WP 3, pero creo que sería posible anular la opción utilizando los filtros option_ *.

Además, sería genial si agregaras la sugerencia como una solicitud de función en core.trac.wordpress.org.

    
respondido por el Denis de Bernardy 29.10.2010 - 15:36
0

La mejor manera de entregar todos los complementos en Multisite Network es "Complemento de Complementos" que puede encontrar aquí: enlace

    
respondido por el user4051 19.03.2011 - 08:45
-1

Logré deshabilitar el complemento pero aún estaba allí en el panel principal del sitio. La única solución que encontré para eliminarlo completamente del sitio principal fue verificar el main.php del complemento del sitio y deshabilitarlo de acuerdo con él:

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();

}
    
respondido por el NetOholik 04.02.2016 - 11:31

Lea otras preguntas en las etiquetas