tamarazuk
9/1/2013 - 5:40 PM

disable-plugins.php

<?php
/*
Plugin Name: Disable Plugins
Description: Disables plugins that you specify depending on the value of the WP_LOCAL_DEV constant 
Version: 0.2
License: GPL version 2 or any later version
Author: Mark Jaquith
Author URI: http://coveredwebservices.com/
*/

class CWS_Disable_Plugins {
	static $instance;
	private $disabled = array();

	/**
	 * Sets up the options filter, and optionally handles an array of plugins to disable
	 * @param array $disables Optional array of plugin filenames to disable
	 */
	public function __construct( Array $disables = NULL) {
		// Handle what was passed in
		if ( is_array( $disables ) ) {
			foreach ( $disables as $disable )
				$this->disable( $disable );
		}

		// Add the filter
		add_filter( 'option_active_plugins', array( $this, 'do_disabling' ) );

		// Allow other plugins to access this instance
		self::$instance = $this;
	}

	/**
	 * Adds a filename to the list of plugins to disable
	 */
	public function disable( $file ) {
		$this->disabled[] = $file;
	}

	/**
	 * Hooks in to the option_active_plugins filter and does the disabling
	 * @param array $plugins WP-provided list of plugin filenames
	 * @return array The filtered array of plugin filenames
	 */
	public function do_disabling( $plugins ) {
		if ( count( $this->disabled ) ) {
			foreach ( (array) $this->disabled as $plugin ) {
				$key = array_search( $plugin, $plugins );
				if ( false !== $key )
					unset( $plugins[$key] );
			}
		}
		return $plugins;
	}
}

/* Begin customization */

if ( defined( 'WP_LOCAL_DEV' ) ) {
	if ( WP_LOCAL_DEV ) {
		new CWS_Disable_Plugins( array( 
						'vaultpress.php' 
					) );
		/*
			For programmatic disabling, you can initialize the object (e.g. as $_localdev) then do:
			$_localdev->disable( 'vaultpress.php' );
		*/
	} else {
		new CWS_Disable_Plugins( array( 
						'debug-bar/debug-bar.php' 
					) );
	}
}