Customizer: Ensure that all existing menus are shown in the Custom Menu widget's dropdown.

* Ensure that a Custom Menu widget selecting a newly-inserted menu gets updated to use the new menu ID upon Save & Publish.
* Dynamically update the visibility of the Custom Menu widget's "no menus" message when the number of menus changes between 0 and 1+.
* Send all dirty Customized settings in `update-widget` Ajax request and `preview()` them so that the widget update/form callbacks have access to any data dependencies in the current Customizer session (such as newly created unsaved menus).
* Update link in Custom Menu widget to point to Menus panel as opposed to Menus admin page, when in the Customizer.
* Fix an issue with extra space at top immediately after creating new menu.
* Fix doubled `update-widget` Ajax requests when changing select dropdown; prevent initial from being aborted.
* Add missing `wp_get_nav_menus()` hooks to preview Customizer updates/inserts for `nav_menu` settings; includes tests.
* Update `wp_get_nav_menu_object()` to allow a menu object to be passed in (and thus passed through).

Props westonruter, adamsilverstein.
Fixes #32814.


git-svn-id: https://develop.svn.wordpress.org/trunk@33488 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Weston Ruter
2015-07-29 16:02:08 +00:00
parent dec1b4da8b
commit dbcb95c022
7 changed files with 314 additions and 55 deletions

View File

@@ -211,6 +211,13 @@ class Test_WP_Customize_Nav_Menu_Setting extends WP_UnitTestCase {
$nav_menu_options = get_option( 'nav_menu_options', array( 'auto_add' => array() ) );
$this->assertContains( $menu_id, $nav_menu_options['auto_add'] );
$menus = wp_get_nav_menus();
$menus_ids = wp_list_pluck( $menus, 'term_id' );
$i = array_search( $menu_id, $menus_ids );
$this->assertNotFalse( $i, 'Update-previewed menu does not appear in wp_get_nav_menus()' );
$filtered_menu = $menus[ $i ];
$this->assertEquals( 'Name 2', $filtered_menu->name );
}
/**
@@ -249,6 +256,13 @@ class Test_WP_Customize_Nav_Menu_Setting extends WP_UnitTestCase {
$nav_menu_options = $this->get_nav_menu_items_option();
$this->assertNotContains( $menu_id, $nav_menu_options['auto_add'] );
$menus = wp_get_nav_menus();
$menus_ids = wp_list_pluck( $menus, 'term_id' );
$i = array_search( $menu_id, $menus_ids );
$this->assertNotFalse( $i, 'Insert-previewed menu was not injected into wp_get_nav_menus()' );
$filtered_menu = $menus[ $i ];
$this->assertEquals( 'New Menu Name 1', $filtered_menu->name );
}
/**