直到在WP_Admin_Bar Object
周围3.3beta1项目可以使用这种类型的语法来访问,例如更改CSS类的现有的菜单项中的一个:在PHP中,如何访问对象中的“:private”数组?
$wp_admin_bar->menu->{'wp-logo'}['meta']['class'] = 'new-class';
当运行print_r($wp_admin_bar)
输出看起来是这样这样的:
WP_Admin_Bar Object
(
[menu] => stdClass Object
(
[my-account] => Array
(
然而,围绕3.3beta2
为不再更改菜单项的CSS类以上语法的工作原理,并从print_r($wp_admin_bar)
输出显示不同的结构,其对象版本:
WP_Admin_Bar Object
(
[nodes:WP_Admin_Bar:private] => Array
(
[my-account] => stdClass Object
(
[id] => my-account
)
我认识到,WordPress的可能不希望我的菜单摆弄这样的,如果有这样做更规范的方式,我喜欢使用它,但据我所知,只有有两个功能可用于修改管理栏add_menu_item
和remove_menu_item
,这些功能不能灵活地执行诸如更改现有菜单项的属性等操作。
为了确认,我查看了wp-includes/class-wp-admin-bar.php
很明显,Wordpress已经改变了他们定义变量的方式。
老班
class WP_Admin_Bar {
var $menu;
var $proto = 'http://';
var $user;
新类
class WP_Admin_Bar {
private $nodes = array();
private $root = array();
public $proto = 'http://';
public $user;
所以我的问题是,如果我有机会获得global $wp_admin_bar
对象,是有我的方式,我可以访问内部nodes:WP_Admin_Bar:private
的对象?如果不是,是否有另一种方法来获得这些对象,例如创建一个新的类来扩展WP_Admin_Bar
类,然后从那里访问对象?
PS:我试图克服这一挑战在不改变核心WordPress的文件...
链接到文件:http://phpxref.ftwr.co.uk/wordpress/nav.html?wp-includes/class-wp-admin-bar.php.source.html
添加了与该类文件的链接。希望通过扩展它而不是改变核心文件来克服这个问题。 – cwd
你的问题看起来非常好。也许你可以在发布之前提交一个带有这个问题链接的错误报告。他们可能愿意改变它以满足您的需求。 http://codex.wordpress.org/Reporting_Bugs – Homer6
我认为这是最好的事情。谢谢。 http://core.trac.wordpress.org/ticket/19371 – cwd