Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 31 additions & 2 deletions features/menu.feature
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,12 @@ Feature: Manage WordPress menus
When I run `wp menu delete "My Menu"`
Then STDOUT should be:
"""
Deleted menu 'My Menu'.
Success: 1 menu deleted.
"""
And I run `wp menu list --format=count`
And the return code should be 0

When I run `wp menu list --format=count`
Then STDOUT should be:
"""
0
Expand All @@ -33,9 +36,13 @@ Feature: Manage WordPress menus
When I run `wp menu delete "First Menu" "Second Menu"`
Then STDOUT should be:
"""
Deleted menu 'First Menu'.
Deleted menu 'Second Menu'.
Success: 2 menus deleted.
"""
And I run `wp menu list --format=count`
And the return code should be 0

When I run `wp menu list --format=count`
Then STDOUT should be:
"""
0
Expand All @@ -47,3 +54,25 @@ Feature: Manage WordPress menus
"""
5
"""

Scenario: Errors when deleting menus
When I try `wp menu delete "Your menu"`
Then STDERR should be:
"""
Warning: Couldn't delete menu 'Your menu'.
Error: No menus deleted.
"""

When I run `wp menu create "My Menu"`
And I run `wp menu list --fields=name,slug`
Then STDOUT should be a table containing rows:
| name | slug |
| My Menu | my-menu |

When I try `wp menu delete "My Menu" "Your menu"`
Then STDERR should be:
"""
Warning: Couldn't delete menu 'Your menu'.
Error: Only 1 of 2 menus deleted.
"""
And the return code should be 1
31 changes: 16 additions & 15 deletions php/commands/menu.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,28 +89,29 @@ public function create( $args, $assoc_args ) {
*/
public function delete( $args, $_ ) {

$count = 0;

$count = $errored = 0;
foreach( $args as $arg ) {

$ret = wp_delete_nav_menu( $arg );

if ( ! $ret || is_wp_error( $ret ) ) {

WP_CLI::warning( "Error deleting menu." );

}
else {

WP_CLI::warning( "Couldn't delete menu '{$arg}'." );
$errored++;
} else {
WP_CLI::log( "Deleted menu '{$arg}'." );
$count++;

}

}

$success_message = ( 1 === $count ) ? '%d menu deleted.' : '%d menus deleted.';
WP_CLI::success( sprintf( $success_message, $count ) );

if ( $errored ) {
$arg_count = count( $args );
if ( $count ) {
WP_CLI::error( sprintf( 'Only %d of %d menus deleted.', $count, $arg_count ) );
} else {
WP_CLI::error( 'No menus deleted.' );
}
} else {
$success_message = ( 1 === $count ) ? '%d menu deleted.' : '%d menus deleted.';
WP_CLI::success( sprintf( $success_message, $count ) );
}
}

/**
Expand Down