Login command fails when installing server plugin as a mu-plugin via Composer
Problem
I'd like to install the server plugin via Composer as a mu-plugin. I'm doing that by modifying the installer path for the server plugin in my composer.json, like so:
"installer-paths": {
"path/to/mu-plugins/{$name}/": [
"type:wordpress-muplugin",
"aaemnnosttv/wp-cli-login-server",
],
This results in a server plugin PHP file installed inside a subdirectory of the mu-plugins folder located at mu-plugins/wp-cli-login-server/wp-cli-login-server.php.
However, the command only checks for the mu-plugin PHP file at mu-plugins/wp-cli-login-server.php.
https://github.com/aaemnnosttv/wp-cli-login-command/blob/ab20aee280de98974ac5b22b635c533d41faf296/src/ServerPlugin.php#L60-L63
Since the command is unable to locate that file, it assumes that the plugin is installed as a normal plugin. So when you attempt to execute a command like wp login as 1, the command fails and you get an error like file_get_contents(/path/to/plugins/wp-cli-login-server/wp-cli-login-server.php): Failed to open stream: No such file or directory
This error happens instead of a message that the server plugin isn't installed because the command doesn't test for the location of the server plugin, but rather the existence of the WP_CLI_Login\WP_CLI_Login_Server class.
https://github.com/aaemnnosttv/wp-cli-login-command/blob/ab20aee280de98974ac5b22b635c533d41faf296/src/ServerPlugin.php#L36-L39
Potential fixes
- Alter the
mustUse()function above to look for the server plugin in bothmu-plugins/wp-cli-login-server.phpandmu-plugins/wp-cli-login-server/wp-cli-login-server.php - Instead of using constants to define the potential locations of the server plugin, use Reflection to get the location of the server plugin. E.g.
(new \ReflectionClass(WP_CLI_Login_Server::class))->getFileName(). IMO this approach is more flexible and better aligns with theisActive()test linked above
Happy to submit a PR if this makes sense