Commit Graph

84 Commits

Author SHA1 Message Date
Drew Jaynes
b208dae5e6 Docs: Apply inline @see tags to hooks referenced in DocBlocks for core classes.
Applying these specially-crafted `@see` tags allows the Code Reference parser to recognize and link these elements as actions and filters.

See #36921.


git-svn-id: https://develop.svn.wordpress.org/trunk@37539 602fd350-edb4-49c9-b593-d223f7449a82
2016-05-23 18:53:05 +00:00
Drew Jaynes
5a96c219bf Docs: Standardize filter docs in the Customizer classes to use third-person singular verbs per the inline documentation standards for PHP.
See #36913.


git-svn-id: https://develop.svn.wordpress.org/trunk@37491 602fd350-edb4-49c9-b593-d223f7449a82
2016-05-22 18:09:59 +00:00
Weston Ruter
0321612c4d Customize: Handle filtering sidebars_widgets when the underlying option is non-existent.
Fixes warning related to a non-array argument for `array_merge()` in `WP_Customize_Widgets::customize_register()`. 

See [37166].
See #36389.
Fixes #36660.


git-svn-id: https://develop.svn.wordpress.org/trunk@37352 602fd350-edb4-49c9-b593-d223f7449a82
2016-05-02 23:41:18 +00:00
Sergey Biryukov
23d737bc53 Administration: Introduce admin_print_footer_scripts-$hook_suffix", a dynamic version of the admin_print_footer_scripts hook.
This is now more consistent with the generic `admin_print_scripts` and the dynamic `admin_print_scripts-$hook_suffix` hooks fired in `wp-admin/admin-header.php`.

Props tfrommen.
Fixes #34334.

git-svn-id: https://develop.svn.wordpress.org/trunk@37279 602fd350-edb4-49c9-b593-d223f7449a82
2016-04-21 15:16:52 +00:00
Dominik Schilling (ocean90)
ca5db69c31 Customize: Harden assignment of Customizer settings transports for selective refreshable widgets
Theme support for `customize-selective-refresh-widgets` can be added _after_ the logic for registering the settings for incoming widgets that have been changed. This is due to themes adding the theme support in `after_setup_theme` which is also the action where `WP_Customize_Widgets::register_settings()` is called. If these both happen at priority 10, which one is called first depends on which one was added first. The other issue is that at the time that `WP_Customize_Widgets::register_settings()` is called at `after_setup_theme`, it is called before `widgets_init` and thus no widgets are yet registered. This means that any settings registered at this point will always have a `refresh` transport even if the theme supports `customize-selective-refresh-widgets`, since the `WP_Widget` instance is not visible yet to see if it supports selective refresh.

The fix: Defer `WP_Customize_Widgets::register_settings()` from `after_setup_theme` to `widgets_init` at priority 95 when the widget objects have all been registered. Also, ensure that the preview filter for `sidebars_widgets` is added before the sidebars are iterated for adding the controls.

Props westonruter.
Fixes #36389.

git-svn-id: https://develop.svn.wordpress.org/trunk@37166 602fd350-edb4-49c9-b593-d223f7449a82
2016-04-07 20:58:56 +00:00
Weston Ruter
4569f93d3e Customize: Require opt-in for selective refresh of widgets.
* Introduces `customize-selective-refresh-widgets` theme support feature and adds to themes.
* Introduces `customize_selective_refresh` arg for `WP_Widget::$widget_options` and adds to all core widgets.
* Remove `selective_refresh` from being a component that can be removed via `customize_loaded_components` filter.
* Add `WP_Customize_Widgets::get_selective_refreshable_widgets()` and `WP_Customize_Widgets::is_widget_selective_refreshable()`.
* Fix default `selector` for `Partial` instances.
* Implement and improve Masronry sidebar refresh logic in Twenty Thirteen and Twenty Fourteen, including preservation of initial widget position after refresh.
* Re-initialize ME.js when refreshing `Twenty_Fourteen_Ephemera_Widget`.

See #27355.
Fixes #35855.


git-svn-id: https://develop.svn.wordpress.org/trunk@37040 602fd350-edb4-49c9-b593-d223f7449a82
2016-03-21 21:58:02 +00:00
Drew Jaynes
43399f4ff7 Docs: Improve syntax and correct documentation throughout a variety of methods in WP_Customize_Widgets.
See #32246. See #35986.


git-svn-id: https://develop.svn.wordpress.org/trunk@36842 602fd350-edb4-49c9-b593-d223f7449a82
2016-03-04 02:01:15 +00:00
Drew Jaynes
a9cce93ff2 Docs: Improve documentation for WP_Customize_Widgets::customize_dynamic_partial_args(), introduced in [36586].
See #27355. See #35986.


git-svn-id: https://develop.svn.wordpress.org/trunk@36841 602fd350-edb4-49c9-b593-d223f7449a82
2016-03-04 01:44:19 +00:00
Weston Ruter
d80ef26b48 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
2016-02-24 18:27:45 +00:00
Weston Ruter
778ee03179 Customize: Ensure dynamic_sidebar() finishes with removing the sidebar ID from the current_dynamic_sidebar_id_stack.
This ensures that widgets appearing after a nested sidebar will continue to be selective refreshable.
 
See #27355.


git-svn-id: https://develop.svn.wordpress.org/trunk@36623 602fd350-edb4-49c9-b593-d223f7449a82
2016-02-23 01:21:38 +00:00
Weston Ruter
56598b5f90 Customize: Prevent PHP notice and JS error caused by widgets and nav menus components if user only has customize capability.
Short-circuits components from initializing their hooks needlessly if current user lacks required capability.

Fixes #35895.


git-svn-id: https://develop.svn.wordpress.org/trunk@36611 602fd350-edb4-49c9-b593-d223f7449a82
2016-02-22 05:30:30 +00:00
Weston Ruter
03360d143d Customize: Add selective refresh framework with implementation for widgets and re-implementation for nav menus.
See https://make.wordpress.org/core/2016/02/16/selective-refresh-in-the-customizer/.

Props westonruter, valendesigns, DrewAPicture, ocean90.
Fixes #27355.


git-svn-id: https://develop.svn.wordpress.org/trunk@36586 602fd350-edb4-49c9-b593-d223f7449a82
2016-02-19 18:40:06 +00:00
Weston Ruter
304ab7c0e4 Customizer: Export nonce, theme, and url app settings in preview as exported in pane.
* Introduce `WP_Customize_Manager::get_nonces()` to consolidate logic for retrieving nonces.
* Export nonces centrally in `wp.customize.settings.nonce` with each request and update nav menus preview to utilize.
* Send updated nonces to preview upon `nonce-refresh`.
* Request full preview refresh if Nav Menu selective refresh request fails (e.g. due to bad nonce).
* Update nav menus and widgets in Customizer to utilize `customize_refresh_nonces` for exporting nonces and keeping them up to date.

See #27355.
Fixes #35617.


git-svn-id: https://develop.svn.wordpress.org/trunk@36414 602fd350-edb4-49c9-b593-d223f7449a82
2016-01-27 17:54:39 +00:00
Gary Pendergast
3025e87fa2 The the Docs: Fix the the dittography
Sometimes, it's easy to to type the the same word twice, especially if if it's a simple word. We probably shouldn't do do do (do do do doo) it, though.

(I've excluded external libs from this change.)

Fixes #34885.



git-svn-id: https://develop.svn.wordpress.org/trunk@35793 602fd350-edb4-49c9-b593-d223f7449a82
2015-12-06 21:22:10 +00:00
Weston Ruter
89f49aad80 Customize: Ensure that a setting (especially a multidimensional one) can still be previewed when the post value to preview is set after preview() is invoked.
* Introduce `customize_post_value_set_{$setting_id}` and `customize_post_value_set` actions which are done when `WP_Customize_Manager::set_post_value()` is called.
* Clear the `preview_applied` flag for aggregated multidimensional settings when a post value is set. This ensures the new value is used instead of a previously-cached previewed value.
* Move `$is_preview` property from subclasses to `WP_Customize_Setting` parent class.
* Deferred preview: Ensure that when `preview()` short-circuits due to not being applicable that it will be called again later when the post value is set.
* Populate post value for updated-widget with the (unsanitized) JS-value in `WP_Customize_Widgets::call_widget_update()` so that value will be properly sanitized when accessed in `WP_Customize_Manager::post_value()`.

Includes unit tests with assertions to check the reported issues and validate the fixes.

Fixes defect introduced in [35007].
See #32103.
Fixes #34738.


git-svn-id: https://develop.svn.wordpress.org/trunk@35724 602fd350-edb4-49c9-b593-d223f7449a82
2015-11-21 02:51:57 +00:00
Sergey Biryukov
a97bf5b2ca Docs: Change variable name in WP_Customize_Widgets::filter_customize_dynamic_setting_args() DocBlock to match the actual variable.
Props mismith227, swissspidy.
Fixes #34426.

git-svn-id: https://develop.svn.wordpress.org/trunk@35381 602fd350-edb4-49c9-b593-d223f7449a82
2015-10-24 14:41:19 +00:00
Andrea Fercia
8774b40dc8 Customizer: Make the widgets "Reorder" and "Add a Widget" buttons... buttons.
For accessibility, UI controls should preferably be native controls. Adds
ARIA attributes and labels to improve accessibility and pair these buttons
with the ones in the Menu Customizer.

Props obenland, TomHarrigan, sanket.parmar, metodiew, afercia.

Fixes #33327.

git-svn-id: https://develop.svn.wordpress.org/trunk@35304 602fd350-edb4-49c9-b593-d223f7449a82
2015-10-20 20:14:51 +00:00
Weston Ruter
370057b5d7 Customizer: Always show Widgets panel initially if sidebars are registered; show notice to users in panel if no widget areas are in current preview.
Widgets panel will not wait to display until the preview loads.

Also fixes problems with `margin-top` in panels where other panels' `active` states change, as well as ensuring sections of deactivated panel collapse before panel is hidden to prevent the pane from becoming empty of controls.

Fixes #33052.
Fixes #33567.


git-svn-id: https://develop.svn.wordpress.org/trunk@35231 602fd350-edb4-49c9-b593-d223f7449a82
2015-10-16 23:47:56 +00:00
Scott Taylor
3616fe5939 Widgets: add a function, is_registered_sidebar() - helps us avoid touching the $wp_registered_sidebars global.
Props GaryJ, wonderboymusic.
Fixes #24878.


git-svn-id: https://develop.svn.wordpress.org/trunk@35102 602fd350-edb4-49c9-b593-d223f7449a82
2015-10-13 01:32:27 +00:00
Weston Ruter
78b73c8906 Customizer: Defer embedding widget controls to improve DOM performance and initial load time.
The Menu Customizer feature includes a performance technique whereby the controls for nav menu items are only embedded into the DOM once the containing menu section is expanded. This commit implements the same DOM deferral for widgets but goes a step further than just embedding the controls once the widget area's Customizer section is expanded: it also defers the embedding of the widget control's form until the widget is expanded, at which point the `widget-added` event also fires to allow any additional widget initialization to be done. The deferred DOM embedding can speed up initial load time by 10x or more. This DOM deferral also yields a reduction in overall memory usage in the browser process.

Includes changes to `wp_widget_control()` to facilitate separating out the widget form from the surrounding accordion container; also includes unit tests for this previously-untested function. Also included are initial QUnit tests (finally) for widgets in the Customizer.

Fixes #33901.


git-svn-id: https://develop.svn.wordpress.org/trunk@34563 602fd350-edb4-49c9-b593-d223f7449a82
2015-09-25 21:01:46 +00:00
Dominik Schilling (ocean90)
dd5471dab2 Customizer: Use hash_equals() for widgets.
git-svn-id: https://develop.svn.wordpress.org/trunk@33535 602fd350-edb4-49c9-b593-d223f7449a82
2015-08-03 20:56:56 +00:00
Weston Ruter
dbcb95c022 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
2015-07-29 16:02:08 +00:00
Scott Taylor
f162be6046 For doc block types, favor bool over the few remaining booleans
See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32964 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-27 01:02:12 +00:00
Scott Taylor
89328eb69f Customizer et al, use elseif in PHP, not else if.
This was corrected via brute force in [31090].

See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32874 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-19 22:00:33 +00:00
Scott Taylor
c8a44d437a Add @static* annotations where they are missing.
Initialize all static vars that are not, most to `null`.

See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32650 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-29 15:42:40 +00:00
Dominik Schilling (ocean90)
cced199188 Customizer: Replace accordion behavior of sections with a slide-in navigation.
This allows users to focus on the contents of the active section more easily and separating the navigation from the content/controls in the Customizer.

props valendesigns, celloexpressions.
see #31336.

git-svn-id: https://develop.svn.wordpress.org/trunk@32649 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-29 13:56:39 +00:00
Weston Ruter
e95740d7d0 Fix wp_send_json_error() response for update-widget Ajax request, to return error code instead of error message, as the WP_Error objects are instantiated with codes and the messages are empty.
Fixes #32496.



git-svn-id: https://develop.svn.wordpress.org/trunk@32601 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-25 22:08:08 +00:00
Scott Taylor
39ef6a72c5 Use void instead of null where appropriate when pipe-delimiting @return types. If a @return only contains void, remove it.
See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32568 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-24 05:39:47 +00:00
Scott Taylor
febd12c957 Clean up @global doc blocks/imports for class-wp-customizer-*.php and friends.
See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32542 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-22 05:05:19 +00:00
Scott Taylor
9333337992 In class-wp-customize-*, clarify/add some @param/@return blocks. Disambiguate some functions that are trying to return the void response of another function they call internally.
See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32535 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-21 22:04:29 +00:00
Helen Hou-Sandi
8ae79e3d33 Customizer: Better experience for widget filtering in desktop and iOS Safari.
Previously, the search field did not appear at all in desktop Safari, and the auto-focus keyboard fly-up in iOS rendered widget adding frustrating at best.

props dsmart, ocean90.
fixes #31987.


git-svn-id: https://develop.svn.wordpress.org/trunk@32243 602fd350-edb4-49c9-b593-d223f7449a82
2015-04-21 14:14:27 +00:00
Dominik Schilling (ocean90)
d8f439c335 Customizer: Refresh nonces when a session expires and the user logs in again.
This was broken since 4.0 and the introduction of user session tokens. The nonces are now tied to session tokens as opposed to user IDs, and thus they change with each re-login.
Custom nonces can be added through the `customize_refresh_nonces` filter. On a successful refresh request the JavaScript API will trigger a `nonce-refresh` event. See widget's update nonce as an example.

props westonruter for initial patch.
fixes #31294.

git-svn-id: https://develop.svn.wordpress.org/trunk@32054 602fd350-edb4-49c9-b593-d223f7449a82
2015-04-06 15:09:21 +00:00
Drew Jaynes
a4d03d360a Add missing parameter and return descriptions to WP_Customize_Widgets->filter_customize_dynamic_setting_args().
See [31370]. See #31888.


git-svn-id: https://develop.svn.wordpress.org/trunk@32036 602fd350-edb4-49c9-b593-d223f7449a82
2015-04-05 15:35:22 +00:00
Drew Jaynes
efaab521f9 Add parameter and return descriptions for WP_Customize_Widgets->get_setting_type().
See [31370]. See #31888.


git-svn-id: https://develop.svn.wordpress.org/trunk@32035 602fd350-edb4-49c9-b593-d223f7449a82
2015-04-05 15:19:01 +00:00
Dominik Schilling (ocean90)
63502a8a01 Customizer: Fix previewing and applying widgets when previewing another theme.
* Unset `wp_get_sidebars_widgets()`' non-admin cache var `$_wp_sidebars_widgets` in Customize theme preview.
* Add `WP_Customize_Setting::$dirty` so that settings can be initially-dirty when the Customizer loads.
* Mark `old_sidebars_widgets_data` setting initially-dirty.
* Mark all `sidebars_widgets` settings as initially-dirty during theme switch.

props westonruter.
see #31484.

git-svn-id: https://develop.svn.wordpress.org/trunk@31705 602fd350-edb4-49c9-b593-d223f7449a82
2015-03-10 22:38:30 +00:00
Drew Jaynes
7bb4ab4088 Add a missing file header to wp-includes/class-wp-customize-widgets.php, separate out the class DocBlock for WP_Customize_Widgets.
Fixes #31446.


git-svn-id: https://develop.svn.wordpress.org/trunk@31544 602fd350-edb4-49c9-b593-d223f7449a82
2015-02-25 08:19:54 +00:00
Dominik Schilling (ocean90)
2518bbbb1f Customizer: Introduce an API to create WP_Customize_Settings for dynamically-created settings.
* Introduce WP_Customize_Manager::add_dynamic_settings() to register dynamically-created settings.
* Introduce `customize_dynamic_setting_args` filter to pass an array of args to a dynamic setting's constructor.
* Add unit tests for WP_Customize_Manager and WP_Customize_Widgets.
* See WP_Customize_Widgets as an example.

props westonruter.
fixes #30936.

git-svn-id: https://develop.svn.wordpress.org/trunk@31370 602fd350-edb4-49c9-b593-d223f7449a82
2015-02-08 23:10:05 +00:00
Sergey Biryukov
4c4de36c5c Customizer: Fix form tag replacement in WP_Customize_Widgets::get_widget_control() after [31200].
see #30126.

git-svn-id: https://develop.svn.wordpress.org/trunk@31226 602fd350-edb4-49c9-b593-d223f7449a82
2015-01-17 13:10:27 +00:00
Andrew Ozz
af5c93a432 Customizer - Widgets: add feedback for screen readers when moving up or down. Props adamsilverstein, afercia. Fixes #28892.
git-svn-id: https://develop.svn.wordpress.org/trunk@30760 602fd350-edb4-49c9-b593-d223f7449a82
2014-12-07 00:44:49 +00:00
Drew Jaynes (DrewAPicture)
205a43ed05 Correctly capitalize JavaScript throughout core docs.
Fixes #30569.


git-svn-id: https://develop.svn.wordpress.org/trunk@30695 602fd350-edb4-49c9-b593-d223f7449a82
2014-12-02 00:30:59 +00:00
Scott Taylor
5817aa262d Improve various @param docs for src/wp-includes/class-wp-customize*.php.
See #30224.


git-svn-id: https://develop.svn.wordpress.org/trunk@30676 602fd350-edb4-49c9-b593-d223f7449a82
2014-11-30 23:32:31 +00:00
Dominik Schilling (ocean90)
8d476eee4f Customizer: Improve ability to filter active state for widget area Customizer sections.
* Mark panels, sections, controls as active if preview explicitly indicates.
* Introduce `WP_Customize_Sidebar_Section` PHP class, and `SidebarSection` JS class.
* Move logic for determining whether a sidebar section is active from the `SidebarControl` to `SidebarSection`.

props westonruter.
fixes #30235.

git-svn-id: https://develop.svn.wordpress.org/trunk@30329 602fd350-edb4-49c9-b593-d223f7449a82
2014-11-13 12:18:01 +00:00
Gary Pendergast
0e68ecc0b6 Add wp_json_encode(), a wrapper for json_encode() that ensures everything is converted to UTF-8.
Change all core calls from `json_encode()` to `wp_json_encode()`.

Fixes #28786.



git-svn-id: https://develop.svn.wordpress.org/trunk@30055 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-28 18:34:16 +00:00
Dominik Schilling (ocean90)
ab128698ad Customizer: Change instances of "Theme Customizer" to just "Customizer", as the Customizer isn't necessarily theme-specific.
Also capitalize "Customizer".
See also https://make.wordpress.org/core/2014/07/08/customizer-improvements-in-4-0/.

props studionashvegas, tareq1988.
fixes #29947.

git-svn-id: https://develop.svn.wordpress.org/trunk@29903 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-15 17:20:34 +00:00
Andrew Nacin
bc582fc058 Customizer: Mixed priority sorting for panels and top-level sections.
props celloexpressions.
fixes #28979.


git-svn-id: https://develop.svn.wordpress.org/trunk@29488 602fd350-edb4-49c9-b593-d223f7449a82
2014-08-14 04:42:30 +00:00
Andrew Nacin
a8e8ed6550 Verify the MAC earlier in WP_Customize_Widgets. props duck_.
git-svn-id: https://develop.svn.wordpress.org/trunk@29377 602fd350-edb4-49c9-b593-d223f7449a82
2014-08-05 06:49:22 +00:00
Drew Jaynes (DrewAPicture)
17ba9ab973 Inline documentation cleanup for 4.0 audit.
phpDoc tweaks for methods, properties, and filters added in [29051]:
* `WP_Customize_Widgets::is_widget_rendered()` method
* `WP_Customize_Widgets::is_sidebar_rendered()` method

See #27993 and #28885.


git-svn-id: https://develop.svn.wordpress.org/trunk@29159 602fd350-edb4-49c9-b593-d223f7449a82
2014-07-14 00:41:20 +00:00
Sergey Biryukov
1477277b53 Customizer: Introduce WP_Customize_Control::active() method to determine whether the control is relevant to the current context (i.e. to the current URL being previewed).
Control can indicate its active state by a subclass overriding the 'active_callback' method, by supplying a callable 'active_callback' argument into the control's constructor, or by filtering 'customize_control_active'.

props westonruter.
see #27993.

git-svn-id: https://develop.svn.wordpress.org/trunk@29051 602fd350-edb4-49c9-b593-d223f7449a82
2014-07-09 23:57:29 +00:00
Sergey Biryukov
f0bde0c945 Use wp_hash() instead of AUTH_KEY in WP_Customize_Widgets::get_instance_hash_key().
props juliobox.
fixes #28783.

git-svn-id: https://develop.svn.wordpress.org/trunk@29028 602fd350-edb4-49c9-b593-d223f7449a82
2014-07-08 17:16:26 +00:00
Dominik Schilling (ocean90)
7edd9edde4 Customizer: Introduce a "panel" API to organize multiple sections into a one section.
Create a panel via `$GLOBALS['wp_customize']->add_panel( $panel_id, $args )` and use `$panel_id` for the `panel` argument in `$GLOBALS['wp_customize']->add_section( $section_id, $args )`. That's it.
As an example all widget area sections are now summarized into one panel. Feedback appreciated.

props celloexpressions.
see #27406.

git-svn-id: https://develop.svn.wordpress.org/trunk@28861 602fd350-edb4-49c9-b593-d223f7449a82
2014-06-26 20:16:21 +00:00