Skip to content

Commit b74f222

Browse files
committed
Remove theme support for 'menus' in unregister_nav_menu() when there are no more menus.
props kovshenin. fixes #26900. git-svn-id: https://develop.svn.wordpress.org/trunk@27220 602fd350-edb4-49c9-b593-d223f7449a82
1 parent 4cfcdab commit b74f222

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

src/wp-includes/nav-menu.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ function unregister_nav_menu( $location ) {
9090

9191
if ( is_array( $_wp_registered_nav_menus ) && isset( $_wp_registered_nav_menus[$location] ) ) {
9292
unset( $_wp_registered_nav_menus[$location] );
93+
if ( empty( $_wp_registered_nav_menus ) ) {
94+
_remove_theme_support( 'menus' );
95+
}
9396
return true;
9497
}
9598
return false;

tests/phpunit/tests/theme/support.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,4 +156,31 @@ function test_plugin_hook() {
156156
remove_theme_support( 'foobar' );
157157
$this->assertFalse( current_theme_supports( 'foobar', 'bar' ) );
158158
}
159+
160+
/**
161+
* @ticket 26900
162+
*/
163+
function test_supports_menus() {
164+
// Start fresh
165+
_remove_theme_support( 'menus' );
166+
$this->assertFalse( current_theme_supports( 'menus' ) );
167+
168+
// Registering a nav menu automatically adds support.
169+
register_nav_menu( 'primary', 'Primary Navigation' );
170+
register_nav_menu( 'secondary', 'Secondary Navigation' );
171+
$this->assertTrue( current_theme_supports( 'menus' ) );
172+
173+
// Support added internally, can't be removed.
174+
remove_theme_support( 'menus' );
175+
$this->assertTrue( current_theme_supports( 'menus' ) );
176+
177+
// Still supports because of secondary.
178+
unregister_nav_menu( 'primary' );
179+
$this->assertTrue( current_theme_supports( 'menus' ) );
180+
181+
// No longer support because we have no menus.
182+
unregister_nav_menu( 'secondary' );
183+
$this->assertEmpty( get_registered_nav_menus() );
184+
$this->assertFalse( current_theme_supports( 'menus' ) );
185+
}
159186
}

0 commit comments

Comments
 (0)