[wp-trac] [WordPress Trac] #19371: As of 3.3beta2 WP_Admin_Bar no longer provides a way to access attributes of existing menu items
WordPress Trac
wp-trac at lists.automattic.com
Sun Nov 27 16:23:09 UTC 2011
#19371: As of 3.3beta2 WP_Admin_Bar no longer provides a way to access attributes
of existing menu items
--------------------------+-----------------------------
Reporter: willshouse | Owner:
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: General | Version:
Severity: normal | Keywords:
--------------------------+-----------------------------
Up until around 3.3beta1 items in the `WP_Admin_Bar Object` could be
accessed using this type of syntax, for example to change the CSS class of
one of the existing menu items:
{{{
$wp_admin_bar->menu->{'wp-logo'}['meta']['class'] = 'new-class';
}}}
When running `print_r($wp_admin_bar)` the output looked something like
this:
{{{
WP_Admin_Bar Object
(
[menu] => stdClass Object
(
[my-account] => Array
(
}}}
However, around version `3.3beta2` the above syntax for changing a menu
item's CSS class no longer works, and the output from
`print_r($wp_admin_bar)` reveals a different structure for that object:
{{{
WP_Admin_Bar Object
(
[nodes:WP_Admin_Bar:private] => Array
(
[my-account] => stdClass Object
(
[id] => my-account
)
}}}
I realize that Wordpress may not want me fiddling with the menus this way,
and if there was a more standardized way to do this I would love to use
it, but as far as I know there are only two functions that are available
to modify the admin bar, `add_menu_item` and `remove_menu_item`, and these
do not give the flexibility to do things like changing the attributes of
existing menu items.
To confirm, I looked at `wp-includes/class-wp-admin-bar.php` it is clear
that Wordpress has changed the way they define the variables.
Old Class
{{{
class WP_Admin_Bar {
var $menu;
var $proto = 'http://';
var $user;
}}}
New Class
{{{
class WP_Admin_Bar {
private $nodes = array();
private $root = array();
public $proto = 'http://';
public $user;
}}}
So basically the problem is that there is no longer any way to access
attributes for existing menu items in the WP admin bar unless I make
changes to the WP core files myself.
BTW I submitted this to Stack Exchange for suggestions (
http://stackoverflow.com/questions/8286798/ ) and the response was that
the `private` variables should be `protected` variables. At least that
would give me something to work with.
--
Ticket URL: <http://core.trac.wordpress.org/ticket/19371>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list