it-swarm-eu.dev

Jak mohu vytvořit automaticky vyplněnou nabídku, která je automaticky přiřazena k místu?

Snažím se přidat BuddyPress nav menu podporu na mé téma a bohužel, BP šablony tagů ještě nejsou plně až šňupací tabák. (V zásadě, pokud nechcete vytvořit explicitní dětské téma pro výchozí téma BP, musíte znovu vytvořit několik kol.)

Takže to, co bych chtěl udělat, je

  1. Zjistit, kdy je BP aktivní (vím, jak to udělat)
  2. Zaregistrujte pozici nabídky, když je aktivní BP (také známé množství)
  3. Vytvořte výchozí nabídku obsahující odkazy na sekce BP ( toto je místo, kde existuje díra v mých znalostech )
  4. Přiřaďte výchozí nabídku do nově registrované pozice

Takže, v podstatě, s mým motivem aktivní, pokud uživatel aktivuje BuddyPress, automaticky dostane menu s poslanci, fóry, aktivitou atd. A bude zobrazen na pozici, ale Pokud by uživatelé chtěli přepsat nabídku, mohli by tak učinit. Myšlenky?

EDIT 1

Bainternet vyhraje cenu. Tady je to, co jsem udělal, trochu upravený z jeho řešení:

Podmíněně jsem zaregistroval umístění nabídky

if( function_exists( 'bp_get_loggedin_user_nav' ) ){
    register_nav_menu( 'lblgbpmenu', 'Default BuddyPress Menu' );
}

Pak jsem podmíněně závislý na volání menu nastavení

if( function_exists( 'bp_get_loggedin_user_nav' ) ){
    add_action( 'widgets_init', 'lblg_add_default_buddypress_menu' );
}

Nakonec jsem nakonec nabídku zaregistroval

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

V podstatě se tedy ptáte, jak vytvořit vlastní nabídku podle kódu a přiřadit ji k umístění nabídky:

 //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 );

Jediné, co musíte udělat, je přidat tolik odkazů, kolik chcete, změňte LOCATION_NAME na skutečný název místa a ujistěte se, že tento kód běží pouze jednou.

6
Bainternet

Vaše volání wp_nav_menu() musí zahrnovat vlastní funkci zpětného volání, například volání wp_list_pages(), do které můžete předat argument include, do kterého můžete zahrnout explicitní ID stránek.

0
Chip Bennett