Customize: Allow controls to be registered without any associated settings.

* Improves parity between partials and controls. A partial or control can be settingless if instantiated with `settings` param as empty array (otherwise, if null, then the partial/control ID is used). 
* Eliminate need to create dummy settings that serve no purpose except to place a control in the UI.
* Removes dummy settings for `create_new_menu` and `new_menu_name`.
* Introduces `WP_Customize_Control::$capability` and `WP_Customize_Partial::$capability`, and if set checks them in the respective `check_capabilities()` methods.
* Prevents PHP fatal error from happening when non-existing settings are provided to control: "Call to a member function `check_capabilities()` on a non-object".
* Fixes issue where nav menu items and widgets were no longer working with selective refresh because cap check was failing.

See #27355.
Fixes #35926.


git-svn-id: https://develop.svn.wordpress.org/trunk@36689 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Weston Ruter
2016-02-24 18:27:45 +00:00
parent 516756e370
commit d80ef26b48
9 changed files with 189 additions and 34 deletions

View File

@@ -325,6 +325,23 @@ class Test_WP_Customize_Partial extends WP_UnitTestCase {
'settings' => array( 'blogname', 'top_secret_clearance' ),
) );
$this->assertFalse( $partial->check_capabilities() );
$partial = new WP_Customize_Partial( $this->selective_refresh, 'no_setting', array(
'settings' => array(),
) );
$this->assertTrue( $partial->check_capabilities() );
$partial = new WP_Customize_Partial( $this->selective_refresh, 'no_setting', array(
'settings' => array(),
'capability' => 'top_secret_clearance',
) );
$this->assertFalse( $partial->check_capabilities() );
$partial = new WP_Customize_Partial( $this->selective_refresh, 'no_setting', array(
'settings' => array(),
'capability' => 'edit_theme_options',
) );
$this->assertTrue( $partial->check_capabilities() );
}
/**