私のテーマにBuddyPressのナビゲーションメニューのサポートを追加しようとしていますが、残念ながらBPのテンプレートタグはまだ十分に考慮されていません。 (基本的に、BP Defaultテーマの明示的な子テーマを作成していない場合は、いくつかのホイールを作り直す必要があります。)
だから私がやりたいことは
ですから、基本的に、私のテーマを有効にした状態で、ユーザーがBuddyPressを有効にすると、メンバー、フォーラム、アクティビティなどのメニューが自動的に表示され、位置に表示されますユーザーがメニューを上書きしたい場合は、自由に変更できます。考えですか?
編集1
Bainternetが賞を受賞しました。これが私のしたことですが、彼の解決策を少し修正したものです。
条件付きでメニューの場所を登録した
if( function_exists( 'bp_get_loggedin_user_nav' ) ){
register_nav_menu( 'lblgbpmenu', 'Default BuddyPress Menu' );
}
それから私は条件付きでメニュー設定への呼び出しに夢中になりました
if( function_exists( 'bp_get_loggedin_user_nav' ) ){
add_action( 'widgets_init', 'lblg_add_default_buddypress_menu' );
}
それで、最後に、私は実際にメニューを登録しました
function lblg_add_default_buddypress_menu(){
global $lblg_themename;
$menuname = $lblg_themename . ' BuddyPress Menu';
$bpmenulocation = 'lblgbpmenu';
// Does the menu exist already?
$menu_exists = wp_get_nav_menu_object( $menuname );
// If it doesn't exist, let's create it.
if( !$menu_exists){
$menu_id = wp_create_nav_menu($menuname);
// Set up default BuddyPress links and add them to the menu.
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __('Home'),
'menu-item-classes' => 'home',
'menu-item-url' => home_url( '/' ),
'menu-item-status' => 'publish'));
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __('Activity'),
'menu-item-classes' => 'activity',
'menu-item-url' => home_url( '/activity/' ),
'menu-item-status' => 'publish'));
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __('Members'),
'menu-item-classes' => 'members',
'menu-item-url' => home_url( '/members/' ),
'menu-item-status' => 'publish'));
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __('Groups'),
'menu-item-classes' => 'groups',
'menu-item-url' => home_url( '/groups/' ),
'menu-item-status' => 'publish'));
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => __('Forums'),
'menu-item-classes' => 'forums',
'menu-item-url' => home_url( '/forums/' ),
'menu-item-status' => 'publish'));
// Grab the theme locations and assign our newly-created menu
// to the BuddyPress menu location.
if( !has_nav_menu( $bpmenulocation ) ){
$locations = get_theme_mod('nav_menu_locations');
$locations[$bpmenulocation] = $menu_id;
set_theme_mod( 'nav_menu_locations', $locations );
}
}
}
そのため、基本的には、コードでカスタムメニューを作成し、それをメニューの場所に割り当てる方法を尋ねています。
//give your menu a name
$name = 'theme default menu';
//create the menu
$menu_id = wp_create_nav_menu($name);
//then get the menu object by its name
$menu = get_term_by( 'name', $name, 'nav_menu' );
//then add the actuall link/ menu item and you do this for each item you want to add
wp_update_nav_menu_item($menu->term_id, 0, array(
'menu-item-title' => __('Home'),
'menu-item-classes' => 'home',
'menu-item-url' => home_url( '/' ),
'menu-item-status' => 'publish'));
// you add as many items ass you need with wp_update_nav_menu_item()
//then you set the wanted theme location
$locations = get_theme_mod('nav_menu_locations');
$locations['LOCATION_NAME'] = $menu->term_id;
set_theme_mod( 'nav_menu_locations', $locations );
だからあなたがしなければならないのはあなたが望むだけ多くのリンクを追加することです、LOCATION_NAME
を実際の場所名に変えて、このコードが一度だけ実行されることを確認してください。
wp_nav_menu()
への呼び出しには、明示的なPage IDを含めることができるinclude
引数を渡すことができるwp_list_pages()
への呼び出しなどのカスタムコールバック関数を含める必要があります。