Rethink the WP-CLI approach #153
Labels
Needs Discussion
Anything that needs a discussion/agreement
[Type] Enhancement
A suggestion for improvement of an existing feature
WP-CLI
Issues related to WP-CLI
Is your enhancement related to a problem? Please describe.
Hi performance team!
@spacedmonkey pinged me to see if I have any input on improving the WP-CLI integration.
The current approach to integrating with WP-CLI is both cumbersome and can lead to side effects due to the use of
object-cache.php
as a "hook".I would suggest a different approach that is safer to use and will ultimately provide a better user experience.
plugin check
command. This package is a separate repository and can be installed via something likewp package install 10up/plugin-check-cli
. As a WP-CLI package, it is already loaded and active before WordPress is loaded, so there is no need for any special handling to get in early. The command can check for the existence of the plugin and make use of its files as required, or come with its own code where it makes sense. This allows for different handling in CLI than for the regular plugin, but also allows for code reuse where applicable (just ensure you can rely on a fixed set of interfaces!). It also gives full control over the WordPress environment and you can already hook into the WordPress lifecycle usingWP_CLI::add_wp_hook()
.plugin check
only if that command is not yet registered (to avoid overriding the already installed WP-CLI package). Thisplugin check
command does not actually run any checks, though, it only produces a helpful message about the missing WP-CLI package and how the user can install it. It will show something like this:The above should be a safer way to achieve a WP-CLI integration with a plugin that goes beyond the boundaries of what a plugin is supposed to do.
That being said, I'd like to note, that I'd generally not recommend have this type of checkers in a plugin, but would rather recommend building it CLI-first and then maybe wrap a plugin UI around it, not the other way around as it is happening here.
Designs
No response
Describe alternatives you've considered
No response
Code of Conduct
The text was updated successfully, but these errors were encountered: