2010-09-27 22:26:36 +02:00
< ? php
2012-07-10 22:32:48 +02:00
/**
2015-10-14 19:27:25 +02:00
* Toolbar API : WP_Admin_Bar class
2012-07-10 22:32:48 +02:00
*
* @ package WordPress
* @ subpackage Toolbar
2015-10-14 19:27:25 +02:00
* @ since 3.1 . 0
*/
/**
* Core class used to implement the Toolbar API .
*
* @ since 3.1 . 0
2012-07-10 22:32:48 +02:00
*/
Code Modernization: Add `AllowDynamicProperties` attribute to all (parent) classes.
Dynamic (non-explicitly declared) properties are deprecated as of PHP 8.2 and are expected to become a fatal error in PHP 9.0.
There are a number of ways to mitigate this:
* If it is an accidental typo for a declared property: fix the typo.
* For known properties: declare them on the class.
* For unknown properties: add the magic `__get()`, `__set()`, et al. methods to the class or let the class extend `stdClass` which has highly optimized versions of these magic methods built in.
* For unknown ''use'' of dynamic properties, the `#[AllowDynamicProperties]` attribute can be added to the class. The attribute will automatically be inherited by child classes.
Trac ticket #56034 is open to investigate and handle the third and fourth type of situations, however it has become clear this will need more time and will not be ready in time for WP 6.1.
To reduce “noise” in the meantime, both in the error logs of WP users moving onto PHP 8.2, in the test run logs of WP itself, in test runs of plugins and themes, as well as to prevent duplicate tickets from being opened for the same issue, this commit adds the `#[AllowDynamicProperties]` attribute to all “parent” classes in WP.
The logic used for this commit is as follows:
* If a class already has the attribute: no action needed.
* If a class does not `extend`: add the attribute.
* If a class does `extend`:
- If it extends `stdClass`: no action needed (as `stdClass` supports dynamic properties).
- If it extends a PHP native class: add the attribute.
- If it extends a class from one of WP's external dependencies: add the attribute.
* In all other cases: no action — the attribute should not be needed as child classes inherit from the parent.
Whether or not a class contains magic methods has not been taken into account, as a review of the currently existing magic methods has shown that those are generally not sturdy enough and often even set dynamic properties (which they should not). See the [https://www.youtube.com/watch?v=vDZWepDQQVE live stream from August 16, 2022] for more details.
This commit only affects classes in the `src` directory of WordPress core.
* Tests should not get this attribute, but should be fixed to not use dynamic properties instead. Patches for this are already being committed under ticket #56033.
* While a number bundled themes (2014, 2019, 2020, 2021) contain classes, they are not a part of this commit and may be updated separately.
Reference: [https://wiki.php.net/rfc/deprecate_dynamic_properties PHP RFC: Deprecate dynamic properties].
Follow-up to [53922].
Props jrf, hellofromTonya, markjaquith, peterwilsoncc, costdev, knutsp, aristath.
See #56513, #56034.
Built from https://develop.svn.wordpress.org/trunk@54133
git-svn-id: http://core.svn.wordpress.org/trunk@53692 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-09-12 17:47:14 +02:00
#[AllowDynamicProperties]
2010-09-27 22:26:36 +02:00
class WP_Admin_Bar {
2011-11-02 21:34:54 +01:00
private $nodes = array ();
2011-12-06 04:42:11 +01:00
private $bound = false ;
2011-11-02 21:34:54 +01:00
public $user ;
2010-09-27 22:26:36 +02:00
2015-05-21 23:39:24 +02:00
/**
Code Modernization: Fix dynamic properties in WP_Admin_Bar.
To fix the dynamic properties, the following changes are included:
* Removes `WP_Admin_Bar::__get()`.
* Declares `menu` as a property on the class, deprecates it, and initializes it to an empty array.
* Removes the unused 'proto' dynamic property.
Dynamic (non-explicitly declared) properties are deprecated as of PHP 8.2 and are expected to become a fatal error in PHP 9.0.
== Why remove the `WP_Admin_Bar::__get()` magic method?
tl;dr
The magic method is no longer needed.
The magic method only handled the `menu` and `proto` dynamic properties. Introducing a full set of magic methods is overkill for this class. Instead of having to maintain magic methods, this changeset instead directly addresses the 2 properties (see below).
== Why declare the `menu` property on the class?
tl;dr
To simplify the code while maintaining backwards compatibility for extenders who are using this deprecated property.
The `menu` property was introduced during the 3.1.0 ''development cycle'' as a declared property [15671]. Its purpose was to ''internally'' hold the menu structure.
During the WP 3.3.0 development cycle, it was replaced by a new `private` property called `nodes` (see [19120]).
But breakage reports from extenders caused it to be restored. [19501] added the `__get()` magic method, i.e. for handling it as a dynamic property, and deprecated it.
>We're not going to maintain compat for $menu. Suggest we make it array() and plugins will have to deal. We can throw a _deprecated_argument() and push them to use the new methods.
~ Source: [https://core.trac.wordpress.org/ticket/19371#comment:17 see #19371 comment 17]
[https://wpdirectory.net/search/01GSTW1X69TBN8FH3SY7V8KPY5 A search of the wp.org plugins and themes repository] shows that a few plugins are still using this deprecated property. To maintain backwards compatibility, `menu` is moved back to the class as a declared property, set to an empty array (as it's been since 3.3.0), and deprecated in the property's description.
== Why remove the `proto` dynamic property?
tl;dr
* It was not intended to be released in 3.1.
* There are no usages of it in Core or in the WP.org's plugin or theme directories.
* It should be safe to remove.
This property was first introduced in the WP 3.1.0 ''development cycle'' to replace the `PROTO` constant (see [16038]) for protocol handling for the admin bar's hyperlinks. [16077] replaced the property's usages with URL functions such as `get_admin_url()` and `admin_url()`. But it missed removing the property, which was no longer needed or used.
It was relocated to the `__get()` magic method as a dynamic property when the `menu` property was restored (see [19501]).
A search of WP.org's plugins and themes repositories shows no usages of the property. Core hasn't used it since the removed in [16038] before 3.1 final release. It should be safe to remove it, but committing very early in the 6.3 alpha cycle to give time for reports of usages, if there are any.
References:
* A [https://www.youtube.com/watch?v=vDZWepDQQVE&t=9362s live open public working session] where these changes were discussed and agreed to.
* [https://wiki.php.net/rfc/deprecate_dynamic_properties PHP RFC: Deprecate dynamic properties].
Follow-up to [19501], [19120], [16308], [16038], [15671].
Props antonvlasenko, hellofromTonya, jrf, markjaquith, desrosj, ironprogrammer, peterwilsoncc, SergeyBiryukov.
See #56876, #56034.
Built from https://develop.svn.wordpress.org/trunk@55580
git-svn-id: http://core.svn.wordpress.org/trunk@55092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-03-21 21:00:19 +01:00
* Deprecated menu property .
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
*
Code Modernization: Fix dynamic properties in WP_Admin_Bar.
To fix the dynamic properties, the following changes are included:
* Removes `WP_Admin_Bar::__get()`.
* Declares `menu` as a property on the class, deprecates it, and initializes it to an empty array.
* Removes the unused 'proto' dynamic property.
Dynamic (non-explicitly declared) properties are deprecated as of PHP 8.2 and are expected to become a fatal error in PHP 9.0.
== Why remove the `WP_Admin_Bar::__get()` magic method?
tl;dr
The magic method is no longer needed.
The magic method only handled the `menu` and `proto` dynamic properties. Introducing a full set of magic methods is overkill for this class. Instead of having to maintain magic methods, this changeset instead directly addresses the 2 properties (see below).
== Why declare the `menu` property on the class?
tl;dr
To simplify the code while maintaining backwards compatibility for extenders who are using this deprecated property.
The `menu` property was introduced during the 3.1.0 ''development cycle'' as a declared property [15671]. Its purpose was to ''internally'' hold the menu structure.
During the WP 3.3.0 development cycle, it was replaced by a new `private` property called `nodes` (see [19120]).
But breakage reports from extenders caused it to be restored. [19501] added the `__get()` magic method, i.e. for handling it as a dynamic property, and deprecated it.
>We're not going to maintain compat for $menu. Suggest we make it array() and plugins will have to deal. We can throw a _deprecated_argument() and push them to use the new methods.
~ Source: [https://core.trac.wordpress.org/ticket/19371#comment:17 see #19371 comment 17]
[https://wpdirectory.net/search/01GSTW1X69TBN8FH3SY7V8KPY5 A search of the wp.org plugins and themes repository] shows that a few plugins are still using this deprecated property. To maintain backwards compatibility, `menu` is moved back to the class as a declared property, set to an empty array (as it's been since 3.3.0), and deprecated in the property's description.
== Why remove the `proto` dynamic property?
tl;dr
* It was not intended to be released in 3.1.
* There are no usages of it in Core or in the WP.org's plugin or theme directories.
* It should be safe to remove.
This property was first introduced in the WP 3.1.0 ''development cycle'' to replace the `PROTO` constant (see [16038]) for protocol handling for the admin bar's hyperlinks. [16077] replaced the property's usages with URL functions such as `get_admin_url()` and `admin_url()`. But it missed removing the property, which was no longer needed or used.
It was relocated to the `__get()` magic method as a dynamic property when the `menu` property was restored (see [19501]).
A search of WP.org's plugins and themes repositories shows no usages of the property. Core hasn't used it since the removed in [16038] before 3.1 final release. It should be safe to remove it, but committing very early in the 6.3 alpha cycle to give time for reports of usages, if there are any.
References:
* A [https://www.youtube.com/watch?v=vDZWepDQQVE&t=9362s live open public working session] where these changes were discussed and agreed to.
* [https://wiki.php.net/rfc/deprecate_dynamic_properties PHP RFC: Deprecate dynamic properties].
Follow-up to [19501], [19120], [16308], [16038], [15671].
Props antonvlasenko, hellofromTonya, jrf, markjaquith, desrosj, ironprogrammer, peterwilsoncc, SergeyBiryukov.
See #56876, #56034.
Built from https://develop.svn.wordpress.org/trunk@55580
git-svn-id: http://core.svn.wordpress.org/trunk@55092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-03-21 21:00:19 +01:00
* @ since 3.1 . 0
* @ deprecated 3.3 . 0 Modify admin bar nodes with WP_Admin_Bar :: get_node (),
* WP_Admin_Bar :: add_node (), and WP_Admin_Bar :: remove_node () .
* @ var array
2015-05-21 23:39:24 +02:00
*/
Code Modernization: Fix dynamic properties in WP_Admin_Bar.
To fix the dynamic properties, the following changes are included:
* Removes `WP_Admin_Bar::__get()`.
* Declares `menu` as a property on the class, deprecates it, and initializes it to an empty array.
* Removes the unused 'proto' dynamic property.
Dynamic (non-explicitly declared) properties are deprecated as of PHP 8.2 and are expected to become a fatal error in PHP 9.0.
== Why remove the `WP_Admin_Bar::__get()` magic method?
tl;dr
The magic method is no longer needed.
The magic method only handled the `menu` and `proto` dynamic properties. Introducing a full set of magic methods is overkill for this class. Instead of having to maintain magic methods, this changeset instead directly addresses the 2 properties (see below).
== Why declare the `menu` property on the class?
tl;dr
To simplify the code while maintaining backwards compatibility for extenders who are using this deprecated property.
The `menu` property was introduced during the 3.1.0 ''development cycle'' as a declared property [15671]. Its purpose was to ''internally'' hold the menu structure.
During the WP 3.3.0 development cycle, it was replaced by a new `private` property called `nodes` (see [19120]).
But breakage reports from extenders caused it to be restored. [19501] added the `__get()` magic method, i.e. for handling it as a dynamic property, and deprecated it.
>We're not going to maintain compat for $menu. Suggest we make it array() and plugins will have to deal. We can throw a _deprecated_argument() and push them to use the new methods.
~ Source: [https://core.trac.wordpress.org/ticket/19371#comment:17 see #19371 comment 17]
[https://wpdirectory.net/search/01GSTW1X69TBN8FH3SY7V8KPY5 A search of the wp.org plugins and themes repository] shows that a few plugins are still using this deprecated property. To maintain backwards compatibility, `menu` is moved back to the class as a declared property, set to an empty array (as it's been since 3.3.0), and deprecated in the property's description.
== Why remove the `proto` dynamic property?
tl;dr
* It was not intended to be released in 3.1.
* There are no usages of it in Core or in the WP.org's plugin or theme directories.
* It should be safe to remove.
This property was first introduced in the WP 3.1.0 ''development cycle'' to replace the `PROTO` constant (see [16038]) for protocol handling for the admin bar's hyperlinks. [16077] replaced the property's usages with URL functions such as `get_admin_url()` and `admin_url()`. But it missed removing the property, which was no longer needed or used.
It was relocated to the `__get()` magic method as a dynamic property when the `menu` property was restored (see [19501]).
A search of WP.org's plugins and themes repositories shows no usages of the property. Core hasn't used it since the removed in [16038] before 3.1 final release. It should be safe to remove it, but committing very early in the 6.3 alpha cycle to give time for reports of usages, if there are any.
References:
* A [https://www.youtube.com/watch?v=vDZWepDQQVE&t=9362s live open public working session] where these changes were discussed and agreed to.
* [https://wiki.php.net/rfc/deprecate_dynamic_properties PHP RFC: Deprecate dynamic properties].
Follow-up to [19501], [19120], [16308], [16038], [15671].
Props antonvlasenko, hellofromTonya, jrf, markjaquith, desrosj, ironprogrammer, peterwilsoncc, SergeyBiryukov.
See #56876, #56034.
Built from https://develop.svn.wordpress.org/trunk@55580
git-svn-id: http://core.svn.wordpress.org/trunk@55092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-03-21 21:00:19 +01:00
public $menu = array ();
2010-09-27 22:26:36 +02:00
2015-05-29 23:37:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* Initializes the admin bar .
*
* @ since 3.1 . 0
2015-05-29 23:37:24 +02:00
*/
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
public function initialize () {
2022-11-29 16:51:14 +01:00
$this -> user = new stdClass ();
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
2011-09-16 12:56:06 +02:00
if ( is_user_logged_in () ) {
/* Populate settings we need for the menu based on the current user. */
$this -> user -> blogs = get_blogs_of_user ( get_current_user_id () );
if ( is_multisite () ) {
2017-12-01 00:11:00 +01:00
$this -> user -> active_blog = get_active_blog_for_user ( get_current_user_id () );
$this -> user -> domain = empty ( $this -> user -> active_blog ) ? user_admin_url () : trailingslashit ( get_home_url ( $this -> user -> active_blog -> blog_id ) );
2011-09-16 12:56:06 +02:00
$this -> user -> account_domain = $this -> user -> domain ;
} else {
2017-12-01 00:11:00 +01:00
$this -> user -> active_blog = $this -> user -> blogs [ get_current_blog_id () ];
$this -> user -> domain = trailingslashit ( home_url () );
2011-09-16 12:56:06 +02:00
$this -> user -> account_domain = $this -> user -> domain ;
}
2010-09-27 22:26:36 +02:00
}
2010-10-28 10:31:36 +02:00
add_action ( 'wp_head' , 'wp_admin_bar_header' );
2010-10-29 09:25:58 +02:00
2010-10-28 10:31:36 +02:00
add_action ( 'admin_head' , 'wp_admin_bar_header' );
2010-11-30 22:50:57 +01:00
if ( current_theme_supports ( 'admin-bar' ) ) {
2013-09-22 16:34:11 +02:00
/**
* To remove the default padding styles from WordPress for the Toolbar , use the following code :
* add_theme_support ( 'admin-bar' , array ( 'callback' => '__return_false' ) );
*/
2017-12-01 00:11:00 +01:00
$admin_bar_args = get_theme_support ( 'admin-bar' );
2010-11-30 22:50:57 +01:00
$header_callback = $admin_bar_args [ 0 ][ 'callback' ];
}
2017-12-01 00:11:00 +01:00
if ( empty ( $header_callback ) ) {
2010-11-30 22:50:57 +01:00
$header_callback = '_admin_bar_bump_cb' ;
2017-12-01 00:11:00 +01:00
}
2010-11-30 22:50:57 +01:00
2017-12-01 00:11:00 +01:00
add_action ( 'wp_head' , $header_callback );
2010-11-30 22:50:57 +01:00
2010-10-29 09:25:58 +02:00
wp_enqueue_script ( 'admin-bar' );
2010-10-28 10:31:36 +02:00
wp_enqueue_style ( 'admin-bar' );
2013-09-18 09:42:09 +02:00
/**
2013-09-18 13:58:19 +02:00
* Fires after WP_Admin_Bar is initialized .
2013-09-18 09:42:09 +02:00
*
2013-09-18 13:58:19 +02:00
* @ since 3.1 . 0
2013-09-18 09:42:09 +02:00
*/
2010-10-28 10:31:36 +02:00
do_action ( 'admin_bar_init' );
2010-09-27 22:26:36 +02:00
}
2015-05-21 23:39:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* Adds a node ( menu item ) to the admin bar menu .
2019-11-03 23:14:01 +01:00
*
* @ since 3.3 . 0
*
* @ param array $node The attributes that define the node .
2015-05-21 23:39:24 +02:00
*/
2011-11-02 21:34:54 +01:00
public function add_menu ( $node ) {
$this -> add_node ( $node );
}
2010-09-27 22:26:36 +02:00
2015-05-21 23:39:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* Removes a node from the admin bar .
2019-11-03 23:14:01 +01:00
*
* @ since 3.1 . 0
*
* @ param string $id The menu slug to remove .
2015-05-21 23:39:24 +02:00
*/
2011-11-02 21:34:54 +01:00
public function remove_menu ( $id ) {
$this -> remove_node ( $id );
}
2010-09-27 22:26:36 +02:00
2011-11-02 21:34:54 +01:00
/**
2016-03-03 16:58:27 +01:00
* Adds a node to the menu .
2011-11-02 21:34:54 +01:00
*
2016-03-03 16:58:27 +01:00
* @ since 3.1 . 0
2015-12-06 22:37:25 +01:00
* @ since 4.5 . 0 Added the ability to pass 'lang' and 'dir' meta data .
Toolbar: Accessibility: Keyboard navigation for screen readers.
Change the admin toolbar to have `role="menu"` and support opening for screen readers. Remove screen reader only log out link and collapse duplicate profile links into one link. This is an imperfect solution to a complex problem in the adminbar, but the lack of screen reader access to submenus is a major accessibility problem, and this fix provides access, even if the mechanism is imperfect.
Screen reader log out added in [21452].
Props abletec, Cheffheid, sabernhardt, alexstine, joedolson, afercia, sparklingrobots, danieltj, swissspidy, netweb, dionysous.
Fixes #34668, #43633.
Built from https://develop.svn.wordpress.org/trunk@57708
git-svn-id: http://core.svn.wordpress.org/trunk@57209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-26 01:52:10 +01:00
* @ since 6.5 . 0 Added the ability to pass 'menu_title' for an ARIA menu name .
2015-12-06 22:37:25 +01:00
*
2014-03-03 07:11:13 +01:00
* @ param array $args {
* Arguments for adding a node .
*
* @ type string $id ID of the item .
* @ type string $title Title of the node .
* @ type string $parent Optional . ID of the parent node .
* @ type string $href Optional . Link for the item .
* @ type bool $group Optional . Whether or not the node is a group . Default false .
2015-12-06 22:37:25 +01:00
* @ type array $meta Meta data including the following keys : 'html' , 'class' , 'rel' , 'lang' , 'dir' ,
Toolbar: Accessibility: Keyboard navigation for screen readers.
Change the admin toolbar to have `role="menu"` and support opening for screen readers. Remove screen reader only log out link and collapse duplicate profile links into one link. This is an imperfect solution to a complex problem in the adminbar, but the lack of screen reader access to submenus is a major accessibility problem, and this fix provides access, even if the mechanism is imperfect.
Screen reader log out added in [21452].
Props abletec, Cheffheid, sabernhardt, alexstine, joedolson, afercia, sparklingrobots, danieltj, swissspidy, netweb, dionysous.
Fixes #34668, #43633.
Built from https://develop.svn.wordpress.org/trunk@57708
git-svn-id: http://core.svn.wordpress.org/trunk@57209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-26 01:52:10 +01:00
* 'onclick' , 'target' , 'title' , 'tabindex' , 'menu_title' . Default empty .
2014-03-03 07:11:13 +01:00
* }
2011-11-02 21:34:54 +01:00
*/
public function add_node ( $args ) {
2020-01-29 01:45:18 +01:00
// Shim for old method signature: add_node( $parent_id, $menu_obj, $args ).
2019-09-15 13:46:54 +02:00
if ( func_num_args () >= 3 && is_string ( $args ) ) {
$args = array_merge ( array ( 'parent' => $args ), func_get_arg ( 2 ) );
2017-12-01 00:11:00 +01:00
}
2011-11-02 21:34:54 +01:00
2017-12-01 00:11:00 +01:00
if ( is_object ( $args ) ) {
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
$args = get_object_vars ( $args );
2017-12-01 00:11:00 +01:00
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
2011-11-04 18:41:38 +01:00
// Ensure we have a valid title.
if ( empty ( $args [ 'id' ] ) ) {
2017-12-01 00:11:00 +01:00
if ( empty ( $args [ 'title' ] ) ) {
2011-11-23 22:46:47 +01:00
return ;
2017-12-01 00:11:00 +01:00
}
2011-11-23 22:46:47 +01:00
2016-07-06 14:40:29 +02:00
_doing_it_wrong ( __METHOD__ , __ ( 'The menu ID should not be empty.' ), '3.3.0' );
2011-11-23 22:46:47 +01:00
// Deprecated: Generate an ID from the title.
2011-11-04 18:41:38 +01:00
$args [ 'id' ] = esc_attr ( sanitize_title ( trim ( $args [ 'title' ] ) ) );
}
2011-11-02 21:34:54 +01:00
$defaults = array (
2011-11-23 22:46:47 +01:00
'id' => false ,
'title' => false ,
'parent' => false ,
'href' => false ,
'group' => false ,
'meta' => array (),
2011-11-02 21:34:54 +01:00
);
2010-09-27 22:26:36 +02:00
2011-11-02 21:34:54 +01:00
// If the node already exists, keep any data that isn't provided.
2019-07-03 01:42:58 +02:00
$maybe_defaults = $this -> get_node ( $args [ 'id' ] );
if ( $maybe_defaults ) {
2011-12-06 04:42:11 +01:00
$defaults = get_object_vars ( $maybe_defaults );
2017-12-01 00:11:00 +01:00
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
// Do the same for 'meta' items.
2017-12-01 00:11:00 +01:00
if ( ! empty ( $defaults [ 'meta' ] ) && ! empty ( $args [ 'meta' ] ) ) {
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
$args [ 'meta' ] = wp_parse_args ( $args [ 'meta' ], $defaults [ 'meta' ] );
2017-12-01 00:11:00 +01:00
}
2010-09-27 22:26:36 +02:00
2011-11-02 21:34:54 +01:00
$args = wp_parse_args ( $args , $defaults );
2010-09-27 22:26:36 +02:00
2011-12-06 01:31:11 +01:00
$back_compat_parents = array (
2011-12-06 04:42:11 +01:00
'my-account-with-avatar' => array ( 'my-account' , '3.3' ),
2017-12-01 00:11:00 +01:00
'my-blogs' => array ( 'my-sites' , '3.3' ),
2011-12-06 01:31:11 +01:00
);
if ( isset ( $back_compat_parents [ $args [ 'parent' ] ] ) ) {
list ( $new_parent , $version ) = $back_compat_parents [ $args [ 'parent' ] ];
2011-12-06 01:46:03 +01:00
_deprecated_argument ( __METHOD__ , $version , sprintf ( 'Use <code>%s</code> as the parent for the <code>%s</code> admin bar node instead of <code>%s</code>.' , $new_parent , $args [ 'id' ], $args [ 'parent' ] ) );
2011-12-06 01:31:11 +01:00
$args [ 'parent' ] = $new_parent ;
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
$this -> _set_node ( $args );
}
2015-05-21 23:39:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* @ since 3.3 . 0
*
2015-05-21 23:39:24 +02:00
* @ param array $args
*/
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
final protected function _set_node ( $args ) {
2011-11-02 21:34:54 +01:00
$this -> nodes [ $args [ 'id' ] ] = ( object ) $args ;
2010-09-27 22:26:36 +02:00
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
/**
* Gets a node .
*
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* @ since 3.3 . 0
*
2015-05-21 23:39:24 +02:00
* @ param string $id
2019-08-16 21:35:58 +02:00
* @ return object | void Node .
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
*/
final public function get_node ( $id ) {
2019-07-03 01:42:58 +02:00
$node = $this -> _get_node ( $id );
if ( $node ) {
2011-12-06 04:42:11 +01:00
return clone $node ;
2017-12-01 00:11:00 +01:00
}
2011-12-06 04:42:11 +01:00
}
2015-05-21 23:39:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* @ since 3.3 . 0
*
2015-05-21 23:39:24 +02:00
* @ param string $id
2015-05-24 07:40:25 +02:00
* @ return object | void
2015-05-21 23:39:24 +02:00
*/
2011-12-06 04:42:11 +01:00
final protected function _get_node ( $id ) {
2017-12-01 00:11:00 +01:00
if ( $this -> bound ) {
2011-12-06 04:42:11 +01:00
return ;
2017-12-01 00:11:00 +01:00
}
2011-12-06 04:42:11 +01:00
2017-12-01 00:11:00 +01:00
if ( empty ( $id ) ) {
2011-12-06 04:42:11 +01:00
$id = 'root' ;
2017-12-01 00:11:00 +01:00
}
2011-12-06 04:42:11 +01:00
2017-12-01 00:11:00 +01:00
if ( isset ( $this -> nodes [ $id ] ) ) {
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
return $this -> nodes [ $id ];
2017-12-01 00:11:00 +01:00
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
}
2015-05-21 23:39:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* @ since 3.3 . 0
*
2015-05-24 07:40:25 +02:00
* @ return array | void
2015-05-21 23:39:24 +02:00
*/
2011-12-06 04:42:11 +01:00
final public function get_nodes () {
2019-07-03 01:42:58 +02:00
$nodes = $this -> _get_nodes ();
if ( ! $nodes ) {
2012-07-10 22:32:48 +02:00
return ;
2017-12-01 00:11:00 +01:00
}
2011-12-06 04:42:11 +01:00
2012-07-10 22:32:48 +02:00
foreach ( $nodes as & $node ) {
$node = clone $node ;
}
return $nodes ;
2011-12-06 04:42:11 +01:00
}
2015-05-21 23:39:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* @ since 3.3 . 0
*
2015-05-24 07:40:25 +02:00
* @ return array | void
2015-05-21 23:39:24 +02:00
*/
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
final protected function _get_nodes () {
2017-12-01 00:11:00 +01:00
if ( $this -> bound ) {
2011-12-06 04:42:11 +01:00
return ;
2017-12-01 00:11:00 +01:00
}
2011-12-06 04:42:11 +01:00
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
return $this -> nodes ;
}
2011-11-23 22:46:47 +01:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* Adds a group to a toolbar menu node .
2020-08-19 04:46:04 +02:00
*
* Groups can be used to organize toolbar items into distinct sections of a toolbar menu .
2011-11-23 22:46:47 +01:00
*
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
* @ since 3.3 . 0
*
2014-03-03 07:11:13 +01:00
* @ param array $args {
* Array of arguments for adding a group .
*
* @ type string $id ID of the item .
* @ type string $parent Optional . ID of the parent node . Default 'root' .
* @ type array $meta Meta data for the group including the following keys :
* 'class' , 'onclick' , 'target' , and 'title' .
* }
2011-11-23 22:46:47 +01:00
*/
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
final public function add_group ( $args ) {
2011-11-23 22:46:47 +01:00
$args [ 'group' ] = true ;
$this -> add_node ( $args );
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
/**
* Remove a node .
*
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* @ since 3.1 . 0
*
2015-05-21 23:39:24 +02:00
* @ param string $id The ID of the item .
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
*/
2011-11-02 21:34:54 +01:00
public function remove_node ( $id ) {
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
$this -> _unset_node ( $id );
}
2015-05-21 23:39:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* @ since 3.3 . 0
*
2015-05-21 23:39:24 +02:00
* @ param string $id
*/
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
final protected function _unset_node ( $id ) {
2011-11-02 21:34:54 +01:00
unset ( $this -> nodes [ $id ] );
2010-09-27 22:26:36 +02:00
}
2010-10-28 17:46:11 +02:00
2015-05-29 23:37:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* @ since 3.1 . 0
2015-05-29 23:37:24 +02:00
*/
2011-11-02 21:34:54 +01:00
public function render () {
2011-12-06 04:42:11 +01:00
$root = $this -> _bind ();
2017-12-01 00:11:00 +01:00
if ( $root ) {
2011-12-31 00:04:28 +01:00
$this -> _render ( $root );
2017-12-01 00:11:00 +01:00
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
}
2011-11-20 19:39:54 +01:00
2015-05-21 23:39:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* @ since 3.3 . 0
*
2015-05-24 07:40:25 +02:00
* @ return object | void
2015-05-21 23:39:24 +02:00
*/
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
final protected function _bind () {
2017-12-01 00:11:00 +01:00
if ( $this -> bound ) {
2011-12-06 04:42:11 +01:00
return ;
2017-12-01 00:11:00 +01:00
}
2011-12-06 04:42:11 +01:00
2023-07-09 22:17:29 +02:00
/*
* Add the root node .
* Clear it first , just in case . Don ' t mess with The Root .
*/
2011-12-06 04:42:11 +01:00
$this -> remove_node ( 'root' );
2017-12-01 00:11:00 +01:00
$this -> add_node (
array (
'id' => 'root' ,
'group' => false ,
)
);
2011-12-06 04:42:11 +01:00
// Normalize nodes: define internal 'children' and 'type' properties.
foreach ( $this -> _get_nodes () as $node ) {
$node -> children = array ();
2017-12-01 00:11:00 +01:00
$node -> type = ( $node -> group ) ? 'group' : 'item' ;
2011-12-06 04:42:11 +01:00
unset ( $node -> group );
// The Root wants your orphans. No lonely items allowed.
2017-12-01 00:11:00 +01:00
if ( ! $node -> parent ) {
2011-12-06 04:42:11 +01:00
$node -> parent = 'root' ;
2017-12-01 00:11:00 +01:00
}
2011-12-06 04:42:11 +01:00
}
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
foreach ( $this -> _get_nodes () as $node ) {
2020-02-09 17:55:09 +01:00
if ( 'root' === $node -> id ) {
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
continue ;
2017-12-01 00:11:00 +01:00
}
2011-11-02 21:34:54 +01:00
2011-12-06 04:42:11 +01:00
// Fetch the parent node. If it isn't registered, ignore the node.
2019-07-03 01:42:58 +02:00
$parent = $this -> _get_node ( $node -> parent );
if ( ! $parent ) {
2011-11-02 21:34:54 +01:00
continue ;
2011-11-09 20:12:48 +01:00
}
2011-11-02 21:34:54 +01:00
2011-12-06 04:42:11 +01:00
// Generate the group class (we distinguish between top level and other level groups).
2020-02-09 17:55:09 +01:00
$group_class = ( 'root' === $node -> parent ) ? 'ab-top-menu' : 'ab-submenu' ;
2011-12-06 04:42:11 +01:00
2020-02-09 17:55:09 +01:00
if ( 'group' === $node -> type ) {
2017-12-01 00:11:00 +01:00
if ( empty ( $node -> meta [ 'class' ] ) ) {
2012-06-30 13:47:21 +02:00
$node -> meta [ 'class' ] = $group_class ;
2017-12-01 00:11:00 +01:00
} else {
2012-06-30 13:47:21 +02:00
$node -> meta [ 'class' ] .= ' ' . $group_class ;
2017-12-01 00:11:00 +01:00
}
2011-12-06 04:42:11 +01:00
}
// Items in items aren't allowed. Wrap nested items in 'default' groups.
2020-02-09 17:55:09 +01:00
if ( 'item' === $parent -> type && 'item' === $node -> type ) {
2011-12-06 04:42:11 +01:00
$default_id = $parent -> id . '-default' ;
$default = $this -> _get_node ( $default_id );
2023-07-09 22:17:29 +02:00
/*
* The default group is added here to allow groups that are
* added before standard menu items to render first .
*/
2011-12-06 04:42:11 +01:00
if ( ! $default ) {
2023-07-09 22:17:29 +02:00
/*
* Use _set_node because add_node can be overloaded .
* Make sure to specify default settings for all properties .
*/
2017-12-01 00:11:00 +01:00
$this -> _set_node (
array (
'id' => $default_id ,
'parent' => $parent -> id ,
'type' => 'group' ,
'children' => array (),
'meta' => array (
'class' => $group_class ,
),
'title' => false ,
'href' => false ,
)
);
$default = $this -> _get_node ( $default_id );
2011-12-06 04:42:11 +01:00
$parent -> children [] = $default ;
2011-11-23 22:46:47 +01:00
}
2011-12-06 04:42:11 +01:00
$parent = $default ;
2023-07-09 22:17:29 +02:00
/*
* Groups in groups aren 't allowed. Add a special ' container ' node .
* The container will invisibly wrap both groups .
*/
2020-02-09 17:55:09 +01:00
} elseif ( 'group' === $parent -> type && 'group' === $node -> type ) {
2011-12-06 04:42:11 +01:00
$container_id = $parent -> id . '-container' ;
$container = $this -> _get_node ( $container_id );
// We need to create a container for this group, life is sad.
if ( ! $container ) {
2023-07-09 22:17:29 +02:00
/*
* Use _set_node because add_node can be overloaded .
* Make sure to specify default settings for all properties .
*/
2017-12-01 00:11:00 +01:00
$this -> _set_node (
array (
'id' => $container_id ,
'type' => 'container' ,
'children' => array ( $parent ),
'parent' => false ,
'title' => false ,
'href' => false ,
'meta' => array (),
)
);
2011-12-06 04:42:11 +01:00
$container = $this -> _get_node ( $container_id );
// Link the container node if a grandparent node exists.
$grandparent = $this -> _get_node ( $parent -> parent );
if ( $grandparent ) {
$container -> parent = $grandparent -> id ;
$index = array_search ( $parent , $grandparent -> children , true );
2020-02-09 17:55:09 +01:00
if ( false === $index ) {
2011-12-06 04:42:11 +01:00
$grandparent -> children [] = $container ;
2017-12-01 00:11:00 +01:00
} else {
2011-12-06 04:42:11 +01:00
array_splice ( $grandparent -> children , $index , 1 , array ( $container ) );
2017-12-01 00:11:00 +01:00
}
2011-12-06 04:42:11 +01:00
}
$parent -> parent = $container -> id ;
}
$parent = $container ;
2011-11-23 22:46:47 +01:00
}
// Update the parent ID (it might have changed).
$node -> parent = $parent -> id ;
// Add the node to the tree.
$parent -> children [] = $node ;
2011-11-02 21:34:54 +01:00
}
2011-12-06 04:42:11 +01:00
2017-12-01 00:11:00 +01:00
$root = $this -> _get_node ( 'root' );
2011-12-06 04:42:11 +01:00
$this -> bound = true ;
return $root ;
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
}
2015-05-21 23:39:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* @ since 3.3 . 0
*
2015-05-21 23:39:24 +02:00
* @ param object $root
*/
2011-12-06 04:42:11 +01:00
final protected function _render ( $root ) {
2023-07-09 22:17:29 +02:00
/*
* Add browser classes .
* We have to do this here since admin bar shows on the front end .
*/
2011-11-22 00:07:54 +01:00
$class = 'nojq nojs' ;
Administration: Remove any CSS related to Internet Explorer versions 6 – 10.
In WordPress 3.2 support for IE6 was dropped, IE7 followed a few versions later. With the 4.8 release, WordPress officially ended support for Internet Explorer versions 8, 9, and 10. Yet, we still have shipped CSS for the unsupported IE versions....until now! Goodbye to ie.css and star hacks!
* Removes ie.css and `ie` style handle.
* Removes IE specific class names and any related CSS.
* Drops support for IE8 and older in `wp_customize_support_script()`.
* Updates compatibility mode for CSS minification to `ie11`.
Props ayeshrajans, isabel_brison, afercia, netweb, peterwilsoncc, ocean90.
Fixes #17232, #46015.
Built from https://develop.svn.wordpress.org/trunk@47771
git-svn-id: http://core.svn.wordpress.org/trunk@47547 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-06 22:15:07 +02:00
if ( wp_is_mobile () ) {
2011-11-22 00:07:54 +01:00
$class .= ' mobile' ;
}
2010-10-28 10:31:36 +02:00
?>
2015-04-01 15:17:27 +02:00
< div id = " wpadminbar " class = " <?php echo $class ; ?> " >
2020-08-17 16:26:07 +02:00
< ? php if ( ! is_admin () && ! did_action ( 'wp_body_open' ) ) { ?>
2015-04-01 15:17:27 +02:00
< a class = " screen-reader-shortcut " href = " #wp-toolbar " tabindex = " 1 " >< ? php _e ( 'Skip to toolbar' ); ?> </a>
< ? php } ?>
2019-01-17 12:55:51 +01:00
< div class = " quicklinks " id = " wp-toolbar " role = " navigation " aria - label = " <?php esc_attr_e( 'Toolbar' ); ?> " >
2017-12-01 00:11:00 +01:00
< ? php
foreach ( $root -> children as $group ) {
2011-12-06 04:42:11 +01:00
$this -> _render_group ( $group );
2017-12-01 00:11:00 +01:00
}
?>
2010-09-27 22:26:36 +02:00
</ div >
</ div >
< ? php
}
2015-05-21 23:39:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* @ since 3.3 . 0
*
2015-05-21 23:39:24 +02:00
* @ param object $node
*/
2011-12-06 04:42:11 +01:00
final protected function _render_container ( $node ) {
2020-02-09 17:55:09 +01:00
if ( 'container' !== $node -> type || empty ( $node -> children ) ) {
2011-11-23 22:46:47 +01:00
return ;
2017-12-01 00:11:00 +01:00
}
2011-11-23 22:46:47 +01:00
2017-11-08 09:35:51 +01:00
echo '<div id="' . esc_attr ( 'wp-admin-bar-' . $node -> id ) . '" class="ab-group-container">' ;
foreach ( $node -> children as $group ) {
$this -> _render_group ( $group );
}
echo '</div>' ;
2011-12-06 04:42:11 +01:00
}
2011-11-23 22:46:47 +01:00
2015-05-21 23:39:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* @ since 3.3 . 0
Toolbar: Accessibility: Keyboard navigation for screen readers.
Change the admin toolbar to have `role="menu"` and support opening for screen readers. Remove screen reader only log out link and collapse duplicate profile links into one link. This is an imperfect solution to a complex problem in the adminbar, but the lack of screen reader access to submenus is a major accessibility problem, and this fix provides access, even if the mechanism is imperfect.
Screen reader log out added in [21452].
Props abletec, Cheffheid, sabernhardt, alexstine, joedolson, afercia, sparklingrobots, danieltj, swissspidy, netweb, dionysous.
Fixes #34668, #43633.
Built from https://develop.svn.wordpress.org/trunk@57708
git-svn-id: http://core.svn.wordpress.org/trunk@57209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-26 01:52:10 +01:00
* @ since 6.5 . 0 Added `$menu_title` parameter to allow an ARIA menu name .
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
*
2015-05-21 23:39:24 +02:00
* @ param object $node
2024-03-04 22:50:11 +01:00
* @ param string | bool $menu_title The accessible name of this ARIA menu or false if not provided .
2015-05-21 23:39:24 +02:00
*/
Toolbar: Accessibility: Keyboard navigation for screen readers.
Change the admin toolbar to have `role="menu"` and support opening for screen readers. Remove screen reader only log out link and collapse duplicate profile links into one link. This is an imperfect solution to a complex problem in the adminbar, but the lack of screen reader access to submenus is a major accessibility problem, and this fix provides access, even if the mechanism is imperfect.
Screen reader log out added in [21452].
Props abletec, Cheffheid, sabernhardt, alexstine, joedolson, afercia, sparklingrobots, danieltj, swissspidy, netweb, dionysous.
Fixes #34668, #43633.
Built from https://develop.svn.wordpress.org/trunk@57708
git-svn-id: http://core.svn.wordpress.org/trunk@57209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-26 01:52:10 +01:00
final protected function _render_group ( $node , $menu_title = false ) {
2020-02-09 17:55:09 +01:00
if ( 'container' === $node -> type ) {
2015-05-21 23:39:24 +02:00
$this -> _render_container ( $node );
return ;
}
2020-02-09 17:55:09 +01:00
if ( 'group' !== $node -> type || empty ( $node -> children ) ) {
2011-12-06 04:42:11 +01:00
return ;
2017-12-01 00:11:00 +01:00
}
2011-11-23 22:46:47 +01:00
2017-12-01 00:11:00 +01:00
if ( ! empty ( $node -> meta [ 'class' ] ) ) {
2012-06-30 13:47:21 +02:00
$class = ' class="' . esc_attr ( trim ( $node -> meta [ 'class' ] ) ) . '"' ;
2017-12-01 00:11:00 +01:00
} else {
2012-06-30 13:47:21 +02:00
$class = '' ;
2017-12-01 00:11:00 +01:00
}
2011-11-23 22:46:47 +01:00
Toolbar: Accessibility: Keyboard navigation for screen readers.
Change the admin toolbar to have `role="menu"` and support opening for screen readers. Remove screen reader only log out link and collapse duplicate profile links into one link. This is an imperfect solution to a complex problem in the adminbar, but the lack of screen reader access to submenus is a major accessibility problem, and this fix provides access, even if the mechanism is imperfect.
Screen reader log out added in [21452].
Props abletec, Cheffheid, sabernhardt, alexstine, joedolson, afercia, sparklingrobots, danieltj, swissspidy, netweb, dionysous.
Fixes #34668, #43633.
Built from https://develop.svn.wordpress.org/trunk@57708
git-svn-id: http://core.svn.wordpress.org/trunk@57209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-26 01:52:10 +01:00
if ( empty ( $menu_title ) ) {
echo " <ul role='menu' id=' " . esc_attr ( 'wp-admin-bar-' . $node -> id ) . " ' $class > " ;
} else {
echo " <ul role='menu' aria-label=' " . esc_attr ( $menu_title ) . " ' id=' " . esc_attr ( 'wp-admin-bar-' . $node -> id ) . " ' $class > " ;
}
2017-11-08 09:35:51 +01:00
foreach ( $node -> children as $item ) {
$this -> _render_item ( $item );
}
echo '</ul>' ;
2011-11-23 22:46:47 +01:00
}
2015-05-21 23:39:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* @ since 3.3 . 0
*
2015-05-21 23:39:24 +02:00
* @ param object $node
*/
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
final protected function _render_item ( $node ) {
2020-02-09 17:55:09 +01:00
if ( 'item' !== $node -> type ) {
2011-11-23 22:46:47 +01:00
return ;
2017-12-01 00:11:00 +01:00
}
2011-11-23 22:46:47 +01:00
2019-03-04 23:46:52 +01:00
$is_parent = ! empty ( $node -> children );
$has_link = ! empty ( $node -> href );
$is_root_top_item = 'root-default' === $node -> parent ;
$is_top_secondary_item = 'top-secondary' === $node -> parent ;
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
2016-07-12 13:18:30 +02:00
// Allow only numeric values, then casted to integers, and allow a tabindex value of `0` for a11y.
Toolbar: Accessibility: Keyboard navigation for screen readers.
Change the admin toolbar to have `role="menu"` and support opening for screen readers. Remove screen reader only log out link and collapse duplicate profile links into one link. This is an imperfect solution to a complex problem in the adminbar, but the lack of screen reader access to submenus is a major accessibility problem, and this fix provides access, even if the mechanism is imperfect.
Screen reader log out added in [21452].
Props abletec, Cheffheid, sabernhardt, alexstine, joedolson, afercia, sparklingrobots, danieltj, swissspidy, netweb, dionysous.
Fixes #34668, #43633.
Built from https://develop.svn.wordpress.org/trunk@57708
git-svn-id: http://core.svn.wordpress.org/trunk@57209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-26 01:52:10 +01:00
$tabindex = ( isset ( $node -> meta [ 'tabindex' ] ) && is_numeric ( $node -> meta [ 'tabindex' ] ) ) ? ( int ) $node -> meta [ 'tabindex' ] : '' ;
$aria_attributes = ( '' !== $tabindex ) ? ' tabindex="' . $tabindex . '"' : '' ;
$aria_attributes .= ' role="menuitem"' ;
2011-11-30 02:27:33 +01:00
2016-11-05 17:28:33 +01:00
$menuclass = '' ;
2019-03-04 23:46:52 +01:00
$arrow = '' ;
2011-11-30 02:27:33 +01:00
if ( $is_parent ) {
2017-12-01 00:11:00 +01:00
$menuclass = 'menupop ' ;
Toolbar: Accessibility: Keyboard navigation for screen readers.
Change the admin toolbar to have `role="menu"` and support opening for screen readers. Remove screen reader only log out link and collapse duplicate profile links into one link. This is an imperfect solution to a complex problem in the adminbar, but the lack of screen reader access to submenus is a major accessibility problem, and this fix provides access, even if the mechanism is imperfect.
Screen reader log out added in [21452].
Props abletec, Cheffheid, sabernhardt, alexstine, joedolson, afercia, sparklingrobots, danieltj, swissspidy, netweb, dionysous.
Fixes #34668, #43633.
Built from https://develop.svn.wordpress.org/trunk@57708
git-svn-id: http://core.svn.wordpress.org/trunk@57209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-26 01:52:10 +01:00
$aria_attributes .= ' aria-expanded="false"' ;
2011-11-30 02:27:33 +01:00
}
2011-02-09 18:35:36 +01:00
2017-12-01 00:11:00 +01:00
if ( ! empty ( $node -> meta [ 'class' ] ) ) {
2012-06-30 13:47:21 +02:00
$menuclass .= $node -> meta [ 'class' ];
2017-12-01 00:11:00 +01:00
}
2012-06-30 13:47:21 +02:00
2019-03-04 23:46:52 +01:00
// Print the arrow icon for the menu children with children.
if ( ! $is_root_top_item && ! $is_top_secondary_item && $is_parent ) {
$arrow = '<span class="wp-admin-bar-arrow" aria-hidden="true"></span>' ;
}
2017-12-01 00:11:00 +01:00
if ( $menuclass ) {
2012-06-30 13:47:21 +02:00
$menuclass = ' class="' . esc_attr ( trim ( $menuclass ) ) . '"' ;
2017-12-01 00:11:00 +01:00
}
2011-11-07 21:38:38 +01:00
2024-06-18 16:52:07 +02:00
echo " <li role='group' id=' " . esc_attr ( 'wp-admin-bar-' . $node -> id ) . " ' $menuclass > " ;
2010-10-28 10:31:36 +02:00
2017-11-08 09:35:51 +01:00
if ( $has_link ) {
$attributes = array ( 'onclick' , 'target' , 'title' , 'rel' , 'lang' , 'dir' );
2017-11-08 09:52:48 +01:00
echo " <a class='ab-item' $aria_attributes href=' " . esc_url ( $node -> href ) . " ' " ;
2017-11-08 09:35:51 +01:00
} else {
$attributes = array ( 'onclick' , 'target' , 'title' , 'rel' , 'lang' , 'dir' );
echo '<div class="ab-item ab-empty-item"' . $aria_attributes ;
}
2010-11-17 19:47:34 +01:00
2017-11-08 09:35:51 +01:00
foreach ( $attributes as $attribute ) {
2019-11-16 00:24:02 +01:00
if ( empty ( $node -> meta [ $attribute ] ) ) {
continue ;
}
if ( 'onclick' === $attribute ) {
echo " $attribute =' " . esc_js ( $node -> meta [ $attribute ] ) . " ' " ;
} else {
2017-11-09 00:13:46 +01:00
echo " $attribute =' " . esc_attr ( $node -> meta [ $attribute ] ) . " ' " ;
2017-11-08 09:35:51 +01:00
}
}
2019-03-04 23:46:52 +01:00
echo " > { $arrow } { $node -> title } " ;
2017-11-08 09:35:51 +01:00
if ( $has_link ) {
echo '</a>' ;
} else {
echo '</div>' ;
}
if ( $is_parent ) {
echo '<div class="ab-sub-wrapper">' ;
foreach ( $node -> children as $group ) {
Toolbar: Accessibility: Keyboard navigation for screen readers.
Change the admin toolbar to have `role="menu"` and support opening for screen readers. Remove screen reader only log out link and collapse duplicate profile links into one link. This is an imperfect solution to a complex problem in the adminbar, but the lack of screen reader access to submenus is a major accessibility problem, and this fix provides access, even if the mechanism is imperfect.
Screen reader log out added in [21452].
Props abletec, Cheffheid, sabernhardt, alexstine, joedolson, afercia, sparklingrobots, danieltj, swissspidy, netweb, dionysous.
Fixes #34668, #43633.
Built from https://develop.svn.wordpress.org/trunk@57708
git-svn-id: http://core.svn.wordpress.org/trunk@57209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2024-02-26 01:52:10 +01:00
if ( empty ( $node -> meta [ 'menu_title' ] ) ) {
$this -> _render_group ( $group , false );
} else {
$this -> _render_group ( $group , $node -> meta [ 'menu_title' ] );
}
2017-11-08 09:35:51 +01:00
}
echo '</div>' ;
}
if ( ! empty ( $node -> meta [ 'html' ] ) ) {
echo $node -> meta [ 'html' ];
}
2011-11-02 21:34:54 +01:00
2017-11-08 09:35:51 +01:00
echo '</li>' ;
2011-11-23 22:46:47 +01:00
}
2010-09-27 22:26:36 +02:00
2015-05-21 23:39:24 +02:00
/**
2017-06-25 23:58:41 +02:00
* Renders toolbar items recursively .
*
* @ since 3.1 . 0
* @ deprecated 3.3 . 0 Use WP_Admin_Bar :: _render_item () or WP_Admin_bar :: render () instead .
* @ see WP_Admin_Bar :: _render_item ()
* @ see WP_Admin_Bar :: render ()
*
2015-05-21 23:39:24 +02:00
* @ param string $id Unused .
* @ param object $node
*/
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
public function recursive_render ( $id , $node ) {
2016-07-06 14:40:29 +02:00
_deprecated_function ( __METHOD__ , '3.3.0' , 'WP_Admin_bar::render(), WP_Admin_Bar::_render_item()' );
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
$this -> _render_item ( $node );
2010-09-27 22:26:36 +02:00
}
2015-05-29 23:37:24 +02:00
/**
Docs: Improve documentation for `WP_Admin_Bar` methods.
Add some missing descriptions and `@since` tags.
Follow-up to [15671], [19120], [19429], [19501], [19558], [25475], [25478], [25563], [32534], [35157], [40947], [45821], [48826].
Props yagniksangani, hellofromTonya, audrasjb, sabernhardt, mukesh27, rehanali, SergeyBiryukov.
Fixes #54191.
Built from https://develop.svn.wordpress.org/trunk@51876
git-svn-id: http://core.svn.wordpress.org/trunk@51469 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-29 15:39:59 +02:00
* Adds menus to the admin bar .
*
* @ since 3.1 . 0
2015-05-29 23:37:24 +02:00
*/
Finalize the WP_Admin_Bar architecture for 3.3.
* Introduce a get_node() method for plugins.
* Deprecate $wp_admin_bar->menu. Plugins will need to use get_node(), remove_node(), add_node() to make modifications. This finalizes a backwards incompatible change made earlier in the cycle.
* Allow add_node() to take a node object (which could come from get_node(), then be modified).
* Ensure that our underlying storage (the nodes property) is private to core. Introduce _set_node, _unset_node, _get_nodes, get_nodes as the only ways to interface with this.
* Protect and finalize _render_item, and _render_group. render() remains public and technically overridable, though I would discourage this of plugin authors.
* Deprecate recursive_render(). Use render() or _render_item().
More about the internals:
* Late-binds a node's 'children' array.
* Eliminates the root property, leverages a 'root' node.
* Splits render() into _bind() and _render(), both protected and finalized.
Fixes #19371.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-12-01 01:25:04 +01:00
public function add_menus () {
2020-01-29 01:45:18 +01:00
// User-related, aligned right.
2011-12-06 04:51:58 +01:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_my_account_menu' , 0 );
2024-07-18 02:52:17 +02:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_my_account_item' , 9991 );
add_action ( 'admin_bar_menu' , 'wp_admin_bar_recovery_mode_menu' , 9992 );
2024-05-27 20:41:15 +02:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_search_menu' , 9999 );
2011-10-06 02:02:18 +02:00
2020-01-29 01:45:18 +01:00
// Site-related.
2013-11-13 19:00:10 +01:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_sidebar_toggle' , 0 );
2011-10-06 02:02:18 +02:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_wp_menu' , 10 );
2011-10-05 20:45:32 +02:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_my_sites_menu' , 20 );
2011-10-07 21:52:26 +02:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_site_menu' , 30 );
2021-11-15 04:43:59 +01:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_edit_site_menu' , 40 );
2015-07-08 22:03:24 +02:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_customize_menu' , 40 );
add_action ( 'admin_bar_menu' , 'wp_admin_bar_updates_menu' , 50 );
2011-10-06 02:02:18 +02:00
2020-01-29 01:45:18 +01:00
// Content-related.
2011-11-22 17:19:05 +01:00
if ( ! is_network_admin () && ! is_user_admin () ) {
add_action ( 'admin_bar_menu' , 'wp_admin_bar_comments_menu' , 60 );
add_action ( 'admin_bar_menu' , 'wp_admin_bar_new_content_menu' , 70 );
}
2011-10-10 20:40:00 +02:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_edit_menu' , 80 );
2010-12-13 22:21:50 +01:00
2011-11-23 22:46:47 +01:00
add_action ( 'admin_bar_menu' , 'wp_admin_bar_add_secondary_groups' , 200 );
2013-09-18 09:42:09 +02:00
/**
2013-09-18 13:58:19 +02:00
* Fires after menus are added to the menu bar .
2013-09-18 09:42:09 +02:00
*
2013-09-18 13:58:19 +02:00
* @ since 3.1 . 0
2013-09-18 09:42:09 +02:00
*/
2010-12-09 17:55:09 +01:00
do_action ( 'add_admin_bar_menus' );
2010-10-28 10:31:36 +02:00
}
2010-09-27 22:26:36 +02:00
}