ziemo
ziemo

Reputation: 31

How to disable specific plugin on Wordpress backend / edit product page

I try to find a solution to disable specific plugins on Wordpress admin area. The problem is that for building WooCommerce shops I use Divi Builder, which on product page can sometimes use 50mb of resources when you try to edit it... if I disable some plugins over there then the load time would be much faster. I've found the following code on other topic:

add_filter( 'option_active_plugins', 'lg_disable_cart66_plugin' );

function lg_disable_cart66_plugin($plugins){

      if(strpos($_SERVER['REQUEST_URI'], '/store/') === FALSE AND strpos($_SERVER['REQUEST_URI'], '/wp-admin/') === FALSE) {
         $key = array_search( 'cart66/cart66.php' , $plugins );
         if ( false !== $key ) unset( $plugins[$key] );
      }

      return $plugins;
 }

But don't know how to modify it, so it only disables the chosen plugin on backend. In other words: I don't want the plugin to load when I edit WooCommerce product page.

Some help will be really appreciated.

Upvotes: 3

Views: 3022

Answers (1)

Muhammad Usama
Muhammad Usama

Reputation: 160

As ‘option_active_plugins’ is fired before any plugin is loaded we need to drop our code down into mu-plugins directory. Please also remember that those plugins are run before the main query is initialized – that is why we don’t have any access to many functionalities, especially conditional tags which will always return false.

Please paste below code or download gist in mu-plugins folder in your wp-content folder. It would disable the plugin in post & page areas only.

<?php
/*
Plugin Name: Disable Plugin for URl
Plugin URI: https://www.glowlogix.com
Description: Disable plugins for for specific backend pages.
Author: Muhammad Usama M.
Version: 1.0.0
*/
add_filter( 'option_active_plugins', 'disable_plugins_per_page' );
function disable_plugins_per_page( $plugin_list ) {

    // Quit immediately if not post edit area.
    global $pagenow;
    if (( $pagenow == 'post.php' || $pagenow == 'edit.php' )) {
        $disable_plugins = array (
            // Plugin Name
            'hello.php',
            'developer/developer.php'
        );
        $plugins_to_disable = array();
        foreach ( $plugin_list as $plugin ) {
            if ( true == in_array( $plugin, $disable_plugins ) ) {
                //error_log( "Found $plugin in list of active plugins." );
                $plugins_to_disable[] = $plugin;
            }
        }
        // If there are plugins to disable then remove them from the list,
        // otherwise return the original list.
        if ( count( $plugins_to_disable ) ) {
            $new_list = array_diff( $plugin_list, $plugins_to_disable );
            return $new_list;
        }   
    }
    return $plugin_list;
}

You can replace $disable_plugins with the required list of plugins to disable.

Upvotes: 1

Related Questions