Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Wordpress Disable Plugin on Specific Pages/Posts

Does anyone know a really effective method for disabling a plugin (that is active) on a specific page? There are some plugins that are not really needed in some pages of the website and they have lot of CSS and JavaScript files that are slowing the loading speed of the website and sometimes might conflict with other files.

I know that I can mess with the plugin's code etc. but it's not really effective.

Any ideas?

Thanks in advance!

like image 255
Gabriel Avatar asked Sep 06 '25 03:09

Gabriel


2 Answers

Here is the idea.

 add_filter( 'option_active_plugins', 'lg_disable_cart66_plugin' );

 function lg_disable_cart66_plugin($plugins){

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

     return $plugins;
 }

p.s. Some people say you might need to put this in mu-plugins folder.

like image 134
mainpart Avatar answered Sep 07 '25 20:09

mainpart


I know it's old but this thread was exactly what I needed.

The only caveat to numediaweb's answer is that remove action requires the same priority as the add action

Hooks in the plugin

add_action('wp_print_styles', 'easy_fancybox_enqueue_styles', 999);
add_action('wp_enqueue_scripts', 'easy_fancybox_enqueue_scripts', 999);
add_action('wp_head', 'easy_fancybox', 999);

Code to remove hooks

function remove_easy_fancybox() {

     global $post;
     $ids = array(12,34,55);
     if(in_array($post->ID,$ids)):
          remove_action('wp_print_styles', 'easy_fancybox_enqueue_styles', 999);
          remove_action('wp_enqueue_scripts', 'easy_fancybox_enqueue_scripts',999);
          remove_action('wp_head', 'easy_fancybox', 999);

          wp_dequeue_script( 'jquery.fancybox' );
          wp_dequeue_script( 'jquery.easing' );
          wp_dequeue_script( 'jquery.mousewheel' );
          wp_dequeue_script( 'jquery.metadata' );
     endif;
}

add_action('wp_head', 'remove_easy_fancybox', 1);

From http://codex.wordpress.org/Function_Reference/remove_action

Important: To remove a hook, the $function_to_remove and $priority arguments must match when the hook was added. This goes for both filters and actions. No warning will be given on removal failure.

I've included my if statement to only run the action on specific post ids, thought it might be helpful.

like image 37
James Jackson Avatar answered Sep 07 '25 21:09

James Jackson