B2主題的用戶下拉菜單(如下圖加框部分),默認并不支持新增菜單項,更不支持排序。今天倡萌就來分享下如何實現(xiàn)新增菜單項,并且支持自由排序。

讓菜單選項支持排序和新增項目
讓菜單選項支持排序
首先,要讓菜單項支持排序,我們就需要修改B2主題的菜單設置選項【B2主題設置 – 模塊設置 – 頂部】的字段類型。
以下是原來的設置字段類型,不支持排序:

我們修改為可支持多選和排序的字段類型:

讓菜單支持新增項目
在查看了 b2\Modules\Templates\Header.php 文件的代碼后,我們找到了 b2_user_menu_list 過濾鉤子,允許我們新增菜單項,但是,如果你設置了上圖的菜單選項,你會發(fā)現(xiàn),新增的菜單項仍舊不會顯示,這是因為,B2主題代碼中還做了一個比對,只有后臺選擇的菜單項才會顯示。但是,B2主題并沒有為后臺的菜單項選項添加過濾鉤子,后臺都沒辦法勾選我們新增的菜單項,前端也就無法顯示了。
所以,綜上所述,我們需要解決兩個問題。
修改方案
在文件 b2\Modules\Settings\Template.php 中搜索 點擊頭像要顯示的菜單,將這個字段的整段代碼替換為下面的代碼:
$top->add_field(array(
'name' => __( '點擊頭像要顯示的菜單', 'b2' ),
'desc' => __( '用戶登陸狀態(tài)下,點擊頭像要顯示的菜單,支持拖放排序。', 'b2' ),
'id'=>'user_menus',
'type' => 'pw_multiselect',
'default' => self::get_default_settings('user_menus'),
'options' => apply_filters('b2_settings_user_menus', array(
'directmessage' => __( '私信列表', 'b2' ),
'gold' => __( '財富管理', 'b2' ),
'distribution'=>__( '推廣中心', 'b2' ),
'task'=>__( '任務中心', 'b2' ),
'vip'=>__( '成為會員', 'b2' ),
'certification'=>__( '認證服務', 'b2' ),
'dark_room'=>__( '小黑屋', 'b2' ),
'orders'=>__( '我的訂單', 'b2' ),
'settings'=>__( '我的設置', 'b2' )
)),
'default'=>['directmessage','gold','task','orders','settings']
));
以上代碼將字段類型更改為 pw_multiselect,允許多選和排序,新增了默認值;還新增了一個 b2_settings_user_menus 過濾鉤子,允許新增后臺菜單選項。
通過上面的代碼修改,就允許我們對菜單項目進行排序,同時新增了后臺菜單選項的鉤子,為下一步做好了基礎。
以上涉及到B2父主題的修改,已經(jīng)反饋給春哥,后續(xù)更新應該會集成。
新增用戶菜單項
要新增用戶菜單項,需要使用到兩個鉤子:
b2_settings_user_menus:在后臺菜單設置中新增項目。b2_user_menu_list:設置前端輸出的菜單項內容。
最終的示例【新增我的收藏】代碼如下,添加到子主題即可:
/**
* 新增后臺用戶菜單選項【示例:新增我的收藏】
* http://www.ydqwiac.cn/docs/b2/b2-dev/user-menus
*/
function b2child_settings_user_menus( $menus ) {
$menus['collections'] = __('我的收藏','b2'); // 注意 collections 和下面新增的前端菜單項的保持一致
return $menus;
}
add_filter('b2_settings_user_menus', 'b2child_settings_user_menus');
/**
* 新增前端用戶菜單項【示例:新增我的收藏】
* http://www.ydqwiac.cn/docs/b2/b2-dev/user-menus
*/
function b2child_ser_menu_list( $arg ) {
$arg['collections'] = array( // 注意 collections 和上面新增的后臺菜單項的保持一致
'text'=>__('我的收藏','b2'),
'link'=>'<a :href="userData.link+\'/collections\'"', //注意修改菜單網(wǎng)址
'new'=>false,
'class'=>'',
'attr'=>'',
'des'=>__('查看收藏的內容','b2'),
'icon'=>b2_get_icon('b2-star-line') // 修改圖標
);
return $arg;
}
add_filter('b2_user_menu_list', 'b2child_ser_menu_list');




我的評論中的代碼給屏蔽了。。 我截圖中,我把紅線標示的地方直接換成了我想跳轉的鏈接,URL直鏈,結果頭像不顯示。 是不是不能用直鏈,這塊應該怎么寫呢?
如果你直接添加的并不是B2用戶中心默認已經(jīng)有的網(wǎng)址(即不是用戶個人網(wǎng)址開頭的),應該也是可以的,只不過可能要在所有斜桿前面添加反斜杠和單引號,具體你可以問問春哥
您好,倡萌! ‘link’=>’
站長你好,沒有子主題的添加到哪個文件呢
當前主題的 functions.php 也可以,但是要注意更新主題會被覆蓋刪除
也可以通過代碼片段管理插件來添加和管理代碼 http://www.ydqwiac.cn/code-snippets.html