Don't require --force flag for deleting already trashed posts
Fixes issue where deleting custom post type posts already in trash incorrectly required --force.
Changes
-
src/Post_Command.php: Added
'trash' !== $statuscheck to skip force requirement when post is already trashed - features/post.feature: Added test scenario covering custom post type deletion from trash
Details
The force requirement check now evaluates three conditions instead of two:
if ( ! $assoc_args['force']
&& 'trash' !== $status // NEW: skip check if already trashed
&& ( 'post' !== $post_type && 'page' !== $post_type ) ) {
return [ 'error', /* ... */ ];
}
This aligns behavior with the documented example showing wp post delete $(wp post list --post_status=trash --format=ids) works without --force, and fixes the specific issue where custom post types in trash couldn't be deleted without the flag.
Closes #XXX
[!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/a6Ljeo /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/a6Ljeo /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/a6Ljeo /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/a6Ljeo /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/a6Ljeo /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/H05bbj /usr/bin/composer install(http block)- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /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/a6Ljeo /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/a6Ljeo /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/H05bbj /usr/bin/composer install(http block)- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /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/a6Ljeo /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/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /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/a6Ljeo /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/a6Ljeo /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/a6Ljeo /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/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/abeb5a8b58fda7ac21f15ee596f302f2959a7114
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /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/a6Ljeo /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/a6Ljeo /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/a6Ljeo /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/a6Ljeo /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/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/sebastianbergmann/environment/zipball/24a711b5c916efc6d6e62aa65aa2ec98fef77f68
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/97ffee3bcfb5805568d6af7f0f893678fc076d2f
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /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/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /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/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/console/zipball/c28ad91448f86c5f6d9d2c70f0cf68bf135f252a
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/dependency-injection/zipball/98af8bb46c56aedd9dd5a7f0414fc72bf2dcfe69
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /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/a6Ljeo /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/a6Ljeo /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/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /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/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /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/a6Ljeo /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/a6Ljeo /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/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/7f8cfe992faa96b6a33bbd75c7bace98864161e7
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /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/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/db-command/zipball/c5277fe0335ea00c77b2790f2a892a692dfdf73c
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/extension-command/zipball/cf68e1f3244a0a9557dd8cf4cc9fb03779b14678
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/media-command/zipball/a810ea0e68473fce6a234e67c6c5f19bb820a753
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /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/a6Ljeo /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/a6Ljeo /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/super-admin-command/zipball/54ac063c384743ee414806d42cb8c61c6aa1fa8e
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/a6Ljeo /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/a6Ljeo /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/a6Ljeo /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>Don't require the --force flag for deleting already trashed posts</issue_title> <issue_description>## Bug Report
Describe the current, buggy behavior
The
wp post deletecommand has this example https://github.com/wp-cli/entity-command/blob/1b659520d73306372f95627724abb93d7044645a/src/Post_Command.php#L463-L466Running this example for a custom post type doesn't work because the
--forceflag is missing, introduced in wp-cli/entity-command#188.Describe how other contributors can replicate this bug
- Create a CPT
- Create a post for that CPT and trash it manually
- Now try to delete the post
Describe what you would expect as the correct outcome
The post should be deleted without a warning because it's already in trash.
Provide a possible solution
Skip the check in https://github.com/wp-cli/entity-command/blob/1b659520d73306372f95627724abb93d7044645a/src/Post_Command.php#L486-L493 if
$statusistrash.</issue_description>Comments on the Issue (you are @copilot in this section)
@danielbachhuber Thanks for the suggestion, @ocean90I'm open to making this change, although it'd technically be a breaking change so we'd need to communicate such accordingly.</comment_new>
- Fixes wp-cli/entity-command#292
💬 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!