Using WordPress wp-cli: Skip Loading All WordPress Plugins Except One or Many

Content Error or Suggest an Edit

Notice a grammatical error or technical inaccuracy? Let us know; we will give you credit!

Introduction

I posted a link to a blog post that provided an interesting method to run wp-cli and skip all enabled WordPress plugins except for one. The wp-cli command allows you to use –skip-plugins which skips all WordPress plugins from loading, you can also specify specific WordPress plugins to skip by adding them to –skip-plugins like so

wp user list --skip-plugins=hello-dolly

However, there isn’t a method to run wp-cli and only load a single WordPress plugin. However, I found a blog article online that provided a clever approach to achieve this, and I posted this article in the Managing WP facebook group There were lots of comments about how to improve this method, and as such I’m going to detail all of them below including the original method.

Why is it important to skip all WordPres plugins except one?

Unfortunately, wp-cli is prone to errors due to WordPress plugins and themes not supporting wp-cli and just really silly reasons. Therefore, skipping WordPress plugins and themes allows wp-cli to operate successfully without error, and this is important when using wp-cli in scripts orautomating tasks.

Method 1: The Original Method by trepmal.com

The original method was from a blog post on trepmal.com and provided three ways to skip all available plugins but one.

WP CLI: –skip-plugins – trepmal.com
trepmal.com

One-liner Method

It’s a fairly simple one-liner method. It will run a sub shell command listing all available plugins and then grep out the plugin of your choice before removing all new lines for a comma.

wp user list --skip-plugins=$(wp plugin list --field=name | grep -v ^DONTSKIP$ | tr  '\n' ',')

Text File Method

You can also generate and pass a text file of plugins you want to skip, and then reference the text file using another sub shell command to cat the text file.

wp plugin list --field=name | grep -v ^DONTSKIP$ | tr  '\n' ',' > skipplugins.txt
wp user list --skip-plugins=`cat skipplugins.txt`

This is great. However, if a bad plugin or theme exists, the sub-shell command will fail. That’s where Method 2 comes into play.

Permanent config file Method

You can define a list of plugins to skip by using a wp-cli configuration file, this file has to reside in your users home directory under .wp-cli in a file named config.yml as show in the following example.

 #~/.wp-cli/config.yml
skip-plugins:
 - skip-me
 - skip-me-too

Method 2: Fix Method 1 when Encountering Broken Plugins and Themes

So in Method 1, there is an issue with the sub-shell command to get a list of plugins such as a broken plugin, theme or package. The wp-cli command fais to run. Aon Shah mentioned this and provided an improved method

Aon Shah

Minor issue with the guide above

If wp cli is broken it wont get plugin list either So

wp user list –skip-plugins=$(wp plugin list — field=name –skip-plugins –skip-themes –skip-packages | grep -v ^DONTSKIP$ | tr ‘\n’ ‘,’)

The new one-liner code changed how the sub-shell command gathers the list of available plugins, it will skip plugins, themes, and packages to get the list of available plugins. So if there is a WordPress plugin or theme that is generating an error, it will be skipped and the list of plugins will be returned correctly.

wp user list --skip-plugins=$(wp plugin list -- field=name --skip-plugins --skip-themes --skip-packages | grep -v ^DONTSKIP$ | tr '\n' ',')

Here are the other Method 1 options updated to use the same technique.

Text File Method Updated

wp plugin list --field=name | grep -v ^DONTSKIP$ | tr  '\n' ',' > skipplugins.txt
wp user list --skip-plugins=`cat skipplugins.txt`

Permanent config file Method Updated

 #~/.wp-cli/config.yml
skip-plugins:
 - skip-me
 - skip-me-too

Method 3 – Allow Single or Multiple Plugins to Load

Another method which was provided by Wes Tatters can be used either on a one-liner or within your shell scripts. Here’s the example he provided.

SKIPPLUGINS='^litespeed-cache$\|^object-cache-pro$\|^redis-cache$'
SKIPLIST=$(wp --skip-plugins --skip-themes --skip-packages --quiet plugin list --field=name 2>/dev/null | grep -v $SKIPPLUGINS | tr '\n' ',' )
wp --skip-plugins="$SKIPLIST" --skip-themes --skip-packages --quiet user list

Here’s a breakdown of who the code above works.

  1. The SKIPPLUGINS variable lists all the WordPress plugins you want to load when running wp-cli
  2. The SKIPLIST variable gets the list of available WordPress plugins on the WordPress instance, and removes the SKIPPLUGINS list of WordPress plugins.
  3. The last command is the wp-cli command that will take the the SKIPLIST variable as the list of WordPress plugins to not load.

You can put this into a one-liner, here is an example

wp --skip-plugins=\"$(wp --skip-plugins --skip-themes --skip-packages --quiet plugin list --field=name 2>/dev/null | grep -v '^litespeed-cache$\|^object-cache-pro$\|^redis-cache$' | tr '\n' ',' )\" --skip-themes --skip-packages --quiet user list

Conclusion

Ultimately it would be great to see wp-cli have an option to specify what plugins to load, introducing the following options –use-plugin or –load-plugin which has been presented to the wp-cli team and shot down.

add a `–skip-plugins-except=` global parameter · Issue #5854 · wp-cli/wp-cli · GitHub
Feature Request Yes, I reviewed the contribution guidelines. Describe your use case and the problem you are facing When doing wp @foo export –filename_format=file.xml –post_type=my-cpt I usually want to skip all plugins except for the …
github.com

Changelog

0 Shares:

You May Also Like