Deshabilitar la acción del complemento / complemento mediante el tema

13

He instalado el complemento de Google Analyticator en mi sitio. También estoy utilizando el complemento de MobilePress para mostrar un tema diseñado para navegadores móviles que no sean teléfonos inteligentes. He configurado Google Analytics para dispositivos móviles para usar en este tema y me gustaría inhabilitar la Analizador plugin, ya que incluye una llamada a un archivo js más grande.

¿Alguien sabe si es posible deshabilitar un complemento utilizando functions.php o algún otro método?

Creo que he localizado el código que agrega las funciones a la página, por lo que si no es posible deshabilitar todo el complemento, ¿es posible detener las acciones para ejecutar? He intentado deshabilitarlos directamente sin suerte. Aquí está el código del archivo del complemento:

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

Intenté eliminar esas acciones con:

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

Cualquier ayuda es muy apreciada.

    
pregunta PNMG 15.03.2011 - 22:36

3 respuestas

21

Cuando WordPress activa un complemento, llama a la función activate_plugin() . Esta función activa el complemento en una caja de arena y redirige a otro lugar en caso de éxito. Algunos autores lo han utilizado para activar mediante programación las dependencias de los complementos.

Hay otra función, deactivate_plugin() , que hace algo similar a la inversa ... en realidad, WordPress desactiva los complementos al hacer clic en "desactivar" o "deshabilitar".

Para desactivar un complemento instalado, simplemente llame:

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

O, para desactivar varios complementos a la vez:

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

Hay un segundo parámetro (el primero es una cadena o una matriz de los complementos para deshabilitar) que le permite deshabilitar los complementos sin tener que llamar a los enlaces de desactivación. Por defecto, está configurado en falso, y te recomiendo que lo dejes así. A menos que, por algún motivo, desee omitir la desactivación, debería hacerlo:

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

Esto solo apagaría el complemento, pero no dispararía nada para que el complemento registrado en la desactivación. Por lo tanto, si el complemento elimina las opciones o las tablas db cuando está desactivado, querrá hacer esta desactivación "silenciosa" para conservar esa información y utilizarla en otro lugar.

respondido por el EAMann 15.03.2011 - 22:53
11

Esto es gracias a la brillante respuesta de EAMann de arriba, y pensé que también podría ser útil para el póster original ...

Necesitaba una solución para asegurarme de que los usuarios desactivaran mi complemento si subían la versión premium (para evitar posibles conflictos). Anteriormente detecté su estado con is_plugin_active y mostré un mensaje de error de administrador para indicar a los usuarios que lo apagaran. Esto es MUCHO más suave ...

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

Nota: no parece funcionar en register_activation_hook, pero admin_init funciona como un encanto.

    
respondido por el Mark Jeldi 20.03.2012 - 13:24
1

Aquí está mi solución, crear un complemento que pueda deshabilitar otros complementos como este:

/*
 * 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);
}

Empuje esto a producción, habilítelo, luego baje la base de datos a su máquina de desarrollo local.

Fuente

    
respondido por el user128526 26.09.2017 - 11:48

Lea otras preguntas en las etiquetas