Display unexpected plugin output during activation with --debug
When a plugin generates output during activation, WordPress returns a WP_Error with code unexpected_output and the captured output as error data. Currently, WP-CLI shows the error message but not the actual output, making debugging difficult.
Changes
-
src/Plugin_Command.php: Check for
unexpected_outputerror code and display captured output viaWP_CLI::debug()with 'plugin' group -
features/plugin-activate.feature: Add test scenario verifying debug output appears with
--debugflag
Example
# Before: no visibility into what was output
$ wp plugin activate broken-plugin
Warning: Failed to activate plugin. The plugin generated unexpected output.
# After: see the actual output with --debug
$ wp plugin activate broken-plugin --debug
Warning: Failed to activate plugin. The plugin generated unexpected output.
Debug (plugin): Unexpected output: echo "initialization started";
The output only appears when --debug is used, keeping normal operation unchanged.
[!WARNING]
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
https://api.github.com/repos/Behat/Behat/zipball/1b6b08efa995fe4135901b862d112adc7e95ecbb
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/Behat/Gherkin/zipball/05a7459283e8e6af0d46ec25b8bb5960ca3cfa7b
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/8e89a01c7b8fed84a12a2a7f5a23a44cdbe4f62e
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/8b8e17615d04f2fc2cd46fc1d2fd888fa21b3cf9
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/e9cf5e4bbf7eeaf9ef5db34938942602838fc2b1
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/ff4efdd80e094a81fd6329b570c9a632f21d42b4
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/d2421de7cec3274ae622c22c744de9a62c7925af
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/134921bfca9b02d8f374c48381451da1d98402f9
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/bobthecow/mustache.php/zipball/176b6b21d68516dd5107a63ab71b0050e518b7a4
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/php-parallel-lint/PHP-Console-Highlighter/zipball/5b4803384d3303cf8e84141039ef56c8a123138d
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6db563514f27e19595a19f45a4bf757b6401194e
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/phpstan/extension-installer/zipball/85e90b3942d06b2326fba0403ec24fe912372936
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/f94d246cc143ec5a23da868f8f7e1393b50eaa82
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/72a6721c9b64b3e4c9db55abbc38f790b318267e
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/b564ca479e7e735f750aaac4935af965572a7845
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/phpstan/phpstan/zipball/2770dcdf5078d0b0d53f94317e06affe88419aa8
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a94ea4d26d865875803b23aaf78c3c2c670ea2ea
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/swissspidy/phpstan-no-private/zipball/f7a1890e350c8d8bf26370426a971d7490ae4245
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/console/zipball/cdb80fa5869653c83cfe1a9084a673b6daf57ea7
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/dependency-injection/zipball/82119812ab0bf3425c1234d413efd1b19bb92ae4
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/finder/zipball/9f696d2f1e340484b4683f7853b273abff94421f
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/translation/zipball/ec25870502d0c7072d086e8ffba1420c85965174
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/var-exporter/zipball/0f020b544a30a7fe8ba972e53ee48a74c0bc87f4
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/yaml/zipball/90208e2fc6f68f613eae7ca25a2458a931b1bacc
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/cache-command/zipball/14f76b0bc8f9fa0a680e9c70e18fcf627774d055
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/entity-command/zipball/896b7fb5ed51fe556017b2c71126947db5cd2b68
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/language-command/zipball/ad1bbfbf2699eff415436a00bb4195900fa1cfe5
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/php-cli-tools/zipball/f12b650d3738e471baed6dd47982d53c5c0ab1c3
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/scaffold-command/zipball/cd1e49a393b1af4eee4f5ccc3ac562862c65ccdf
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/spyc/zipball/6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/wp-cli-tests/zipball/75b660dddaa9f512d104d93da4a0a3ede1183a93
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/wp-cli/zipball/ee4fb67b12eb904527bde1c4a0a4d6538a14681a
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/iRrq2f /usr/bin/composer install --no-interaction(http block)If you need me to access, download, or install something from one of these locations, you can either:
- Configure Actions setup steps to set up my environment, which run before the firewall is enabled
- Add the appropriate URLs or hosts to the custom allowlist in this repository's Copilot coding agent settings (admins only)
Original prompt
This section details on the original issue you should resolve
<issue_title>
wp plugin activateshould show what unexpected output the plugin generated</issue_title> <issue_description>If a plugin generates output during activation,activate_pluginwill return anWP_Errorobject configured like this:$output = ob_get_clean(); return new WP_Error( 'unexpected_output', __( 'The plugin generated unexpected output.' ), $output );As you can see, the output is passed as the third parameter, and the error has code "unexpected_output".
I have a use-case where I need the output that was generated for logging reasons.
Relevant code that should print the output:
https://github.com/wp-cli/extension-command/blob/409b3f6defa9d02f32b5f04bbf969a9906e1f6de/src/Plugin_Command.php#L347-L354</issue_description>
Comments on the Issue (you are @copilot in this section)
@danielbachhuber Hey @Luc45,Thanks for the suggestion!
I have a use-case where I need the output that was generated for logging reasons.
I'm a little hesitant about changing the output solely for this use case.
What do you think about instead running the
I think it's useful to include the output just to make debugging easier. Could be in a debug() statement though.</comment_new>$resultthrough an action, so your custom code can capture and report the output however you need?</comment_new> <comment_new>@swissspidy
- Fixes wp-cli/extension-command#329
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.
Codecov Report
:white_check_mark: All modified and coverable lines are covered by tests.
:loudspeaker: Thoughts on this report? Let us know!