it-swarm.dev

Jak mogę utworzyć automatycznie wypełnione menu, które jest automatycznie przypisywane do lokalizacji?

Próbuję dodać obsługę menu nawigacyjnego BuddyPress do mojego motywu i, niestety, znaczniki szablonów BP nadal nie są w pełni gotowe do wymazania. (Zasadniczo, jeśli nie tworzysz wyraźnego motywu potomnego dla motywu domyślnego BP, musisz wymyślić kilka kółek).

Tak więc chciałbym to zrobić

  1. Wykryj, gdy BP jest aktywne (wiem, jak to zrobić)
  2. Zarejestruj pozycję menu, gdy BP jest aktywne (również znana ilość)
  3. Utwórz domyślne menu zawierające odsyłacze do sekcji BP ( w tym miejscu istnieje dziura w mojej wiedzy )
  4. Przypisz wspomniane menu domyślne do nowo zarejestrowanej pozycji

Tak więc, jeśli mój motyw jest aktywny, jeśli użytkownik aktywuje BuddyPressa, automatycznie otrzyma menu z Członkami, Forami, Aktywnością itp. I zostanie wyświetlone do pozycji , ale jeśli użytkownicy chcieli zastąpić menu, mogliby to zrobić. Myśli?

EDYCJA 1

Bainternet wygrywa nagrodę. Oto co zrobiłem, nieznacznie zmodyfikowałem jego rozwiązanie:

Warunkowo zarejestrowałem lokalizację menu

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

Następnie warunkowo zacząłem dzwonić do konfiguracji menu

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

W końcu zarejestrowałem 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

Zasadniczo pytasz, jak utworzyć niestandardowe menu według kodu i przypisać je do lokalizacji menu:

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

Wszystko, co musisz zrobić, to dodać tyle linków, ile chcesz, zmienić LOCATION_NAME na rzeczywistą nazwę lokalizacji i upewnić się, że ten kod jest uruchamiany tylko raz.

6
Bainternet

Twoje wywołanie funkcji wp_nav_menu() musi zawierać niestandardową funkcję wywołania zwrotnego, taką jak wywołanie funkcji wp_list_pages(), do której możesz przekazać argument include, do którego możesz dołączyć jawne identyfikatory stron.

0
Chip Bennett