Automattic\WooCommerce

Packages::deactivate_merged_packages()protected staticWC 1.0

Deactivates merged feature plugins.

Once a feature plugin is merged into WooCommerce Core it should be deactivated. This method will ensure that a plugin gets deactivated. Note that for the first request it will still be active, and as such, there may be some odd behavior. This is unlikely to cause any issues though because it will be deactivated on the request that updates or activates WooCommerce.

Method of the class: Packages{}

No Hooks.

Return

null. Nothing (null).

Usage

$result = Packages::deactivate_merged_packages();

Packages::deactivate_merged_packages() code WC 9.4.2

protected static function deactivate_merged_packages() {
	// Developers may need to be able to run merged feature plugins alongside merged packages for testing purposes.
	if ( Constants::is_true( 'WC_ALLOW_MERGED_FEATURE_PLUGINS' ) ) {
		return;
	}

	// Scroll through all of the active plugins and disable them if they're merged packages.
	$active_plugins = get_option( 'active_plugins', array() );
	// Deactivate the plugin if possible so that there are no conflicts.
	foreach ( $active_plugins as $active_plugin_path ) {
		$plugin_file = basename( plugin_basename( $active_plugin_path ), '.php' );

		if ( ! self::is_package_enabled( $plugin_file ) ) {
			continue;
		}

		require_once ABSPATH . 'wp-admin/includes/plugin.php';

		// Make sure to display a message informing the user that the plugin has been deactivated.
		$plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $active_plugin_path );
		deactivate_plugins( $active_plugin_path );
		add_action(
			'admin_notices',
			function() use ( $plugin_data ) {
				echo '<div class="error"><p>';
				printf(
				/* translators: %s: is referring to the plugin's name. */
					esc_html__( 'The %1$s plugin has been deactivated as the latest improvements are now included with the %2$s plugin.', 'woocommerce' ),
					'<code>' . esc_html( $plugin_data['Name'] ) . '</code>',
					'<code>WooCommerce</code>'
				);
				echo '</p></div>';
			}
		);
	}
}