直到在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