mehrshaddarzi
2/1/2018 - 2:21 PM

A Must-use plugin to filter active plugins in on a per-page basis.

A Must-use plugin to filter active plugins in on a per-page basis.

<?php
// returns the path of the request URI without the query string
// see http://php.net/manual/en/function.parse-url.php
// and http://php.net/manual/en/reserved.variables.server.php
// and http://php.net/manual/en/url.constants.php

$request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
 
$is_admin = strpos( $request_uri, '/wp-admin/' );

// add filter in front pages only
if( false === $is_admin ){
	add_filter( 'option_active_plugins', 'kinsta_option_active_plugins' );
}

/**
 * Filters active plugins
 *
 * @param array   $plugins An array of active plugins.
 */
function kinsta_option_active_plugins( $plugins ){
	global $request_uri;
	$is_contact_page = strpos( $request_uri, '/contact/' );

	$unnecessary_plugins = array();

	// conditions
	// if this is not contact page
	// deactivate plugins
	if( false === $is_contact_page ){
		$unnecessary_plugins[] = 'contact-form-7/wp-contact-form-7.php';
		$unnecessary_plugins[] = 'custom-post-type-ui/custom-post-type-ui.php';
		$unnecessary_plugins[] = 'query-monitor/query-monitor.php';
	}

	foreach ( $unnecessary_plugins as $plugin ) {
		$k = array_search( $plugin, $plugins );
		if( false !== $k ){
			unset( $plugins[$k] );
		}
	}

	return $plugins;
}