Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
A Must-use plugin to filter active plugins in on a per-page basis.
<?php
/**
* @package active-plugins
* @version 1.0
*
* Plugin Name: Active Plugins
* Plugin URI: http://wordpress.org/extend/plugins/#
* Description: This is a development plugin
* Author: Carlo Daniele
* Version: 1.0
* Author URI: https://carlodaniele.it/
*/
// shortcode to list active plugins
add_shortcode( 'activeplugins', function(){
$active_plugins = get_option( 'active_plugins' );
$plugins = "";
if( count( $active_plugins ) > 0 ){
$plugins = "<ul>";
foreach ( $active_plugins as $plugin ) {
$plugins .= "<li>" . $plugin . "</li>";
}
$plugins .= "</ul>";
}
return $plugins;
});
$request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
$is_admin = strpos( $request_uri, '/wp-admin/' );
if( false === $is_admin ){
// filter active plugins
add_filter( 'option_active_plugins', function( $plugins ){
global $request_uri;
$is_contact_page = strpos( $request_uri, '/contact/' );
// change elements according to your needs
$myplugins = array(
"contact-form-7/wp-contact-form-7.php",
"code-snippets/code-snippets.php",
"query-monitor/query-monitor.php",
"autoptimize/autoptimize.php"
);
if( false === $is_contact_page ){
$plugins = array_diff( $plugins, $myplugins );
}
return $plugins;
} );
}
@aelsharawi
Copy link

aelsharawi commented May 7, 2017

it did not work with me (looks like another caching plugin is interfering, I have w3t, varnish)
also, it removes the word "contact" if it is in the main menu and when typing the url contact it redirects to main page

@aelsharawi
Copy link

aelsharawi commented May 7, 2017

@carlodaniele
Copy link
Author

carlodaniele commented Jun 2, 2017

Consider that this plugin is just an example supporting a tutorial. It's not meant to be used in production. If needed, the developer should carefully test the plugin on his own installation before putting it at work in production. The plugin has been successfully tested on several installations, but it could not be tested under every conditions.

@luiginica
Copy link

luiginica commented Jan 6, 2018

This one is for plugins. https://wordpress.org/support/plugin/wp-asset-clean-up/ is for css/js. If you for need css/js you can also use gonzales.
@carlodaniele do you know an alternative plugin like yours? Thank you!

@shirokoweb
Copy link

shirokoweb commented May 22, 2018

This won't work, you can't send emails (CF7) breaks the plugin

@carlodaniele
Copy link
Author

carlodaniele commented Mar 9, 2019

This one is for plugins. https://wordpress.org/support/plugin/wp-asset-clean-up/ is for css/js. If you for need css/js you can also use gonzales.
@carlodaniele do you know an alternative plugin like yours? Thank you!

See the following:
https://wordpress.org/plugins/plugin-load-filter/
https://wordpress.org/plugins/plugin-organizer/

@carlodaniele
Copy link
Author

carlodaniele commented Mar 9, 2019

This won't work, you can't send emails (CF7) breaks the plugin

The code has been reviewed and updated. Check it again

@hellkaim
Copy link

hellkaim commented Mar 26, 2019

Hi,
Is there a way to manage pages not by URL but by ID (using $page_id = get_queried_object_id(); or similar)? The issue is that on a front page you do not have any URL and in my case it's much easier to manage them by ID's rather then by URL.

Thanks in advance.

@ezosher
Copy link

ezosher commented Jun 7, 2019

Thanks for this snippet it is working, but I need some help please.
I couldn't change the fact that it disables the plugins on all pages && not like in the conditional statement listed in this code

@malayalidotca
Copy link

malayalidotca commented Dec 16, 2019

Hi @carlodaniele,

I am developing a site where I am using the SEOPress SEO plugin and WPFORO forum plugin. These two don't play well together because WPFORO also has built in forum functionalities and I need to disable SEOPress on my forum pages that starts with https://domain.com/forums*

Now coming to the point, I have no idea how to integrate your code and I was wondering if you are available for PAID integration of this script.

For context:

This is the only exclusion I want - No SEOPress plugin on pages starting with https://domain.com/forums/ and https://domain.com/forums/*

I am using WP-Rocket plugin but the forum pages are excluded

I would appreciate a reply.

Jimmy

@guidomgs
Copy link

guidomgs commented Apr 29, 2020

Mate you are awesome!

@gghidoni
Copy link

gghidoni commented May 1, 2020

Salve, in $myplugins = array si specificano i plugin da disabilitare in quella determinata pagina o i plugin consentiti? Per specificare l'uri della Home Page basta inserire '/' come indirizzo? Grazie

@tbrock47
Copy link

tbrock47 commented Aug 18, 2020

As it is today, I am finding the code snippet will indeed deactivate the chosen plugins but will never reactivate them. Accessing the correctly associated URL does not turn them back on. You have to go into the admin panel and reactivate the plug-in after removing this code.

WordPress 5.4
PHP 7.4

@bobbingwide
Copy link

bobbingwide commented Feb 18, 2022

As it is today, I am finding the code snippet will indeed deactivate the chosen plugins but will never reactivate them. Accessing the correctly associated URL does not turn them back on. You have to go into the admin panel and reactivate the plug-in after removing this code.

I experienced a similar problem when I was developing a very similar plugin. The NextGEN Gallery plugin was updating the active_plugins option at shutdown. My workaround was to run this at shutdown before NextGEN ran its logic.

do_action( 'activate_plugin', __FILE__);

@RayHollister
Copy link

RayHollister commented May 6, 2022

Has anyone been able to get this to work with in_category() or has_term()? I am trying to make a MU plugin that disables plugins one posts and pages in certain categories.

@mcknightd
Copy link

mcknightd commented May 6, 2022

Has anyone been able to get this to work with in_category() or has_term()? I am trying to make a MU plugin that disables plugins one posts and pages in certain categories.

@ryanhollister I believe the plugins will already be loaded before those things are determined. Parsing the page URL might be a workaround for categories if your permalink settings include the category name.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment