web-dev-qa-db-ja.com

場所に自動的に割り当てられる自動入力メニューを作成する方法を教えてください。

私のテーマにBuddyPressのナビゲーションメニューのサポートを追加しようとしていますが、残念ながらBPのテンプレートタグはまだ十分に考慮されていません。 (基本的に、BP Defaultテーマの明示的な子テーマを作成していない場合は、いくつかのホイールを作り直す必要があります。)

だから私がやりたいことは

  1. BPがアクティブになったことを検出します(これを行う方法がわかります)
  2. BPが有効なときにメニュー位置を登録します(既知の数量でもあります)。
  3. BPセクションへのリンクを含むデフォルトメニューを作成します(これは私の知識の穴があるところです
  4. デフォルトメニューを新しく登録した位置に割り当てます

ですから、基本的に、私のテーマを有効にした状態で、ユーザーが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 );
        }

    } 
}
6
ZaMoose

そのため、基本的には、コードでカスタムメニューを作成し、それをメニューの場所に割り当てる方法を尋ねています。

 //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を実際の場所名に変えて、このコードが一度だけ実行されることを確認してください。

6
Bainternet

wp_nav_menu()への呼び出しには、明示的なPage IDを含めることができるinclude引数を渡すことができるwp_list_pages()への呼び出しなどのカスタムコールバック関数を含める必要があります。

0
Chip Bennett