J'essaie d'ajouter le support du menu de navigation de BuddyPress à mon thème et, malheureusement, les balises de modèle de BP ne sont toujours pas à la hauteur. (En gros, si vous ne créez pas un thème enfant explicite pour le thème BP Default, vous devez réinventer plusieurs roues.)
Donc ce que j'aimerais faire c'est
Donc, essentiellement, avec mon thème actif, si un utilisateur active BuddyPress, il obtiendra automatiquement un menu avec Membres, Forums, Activité, etc. et sera affiché à une position, mais si les utilisateurs souhaitent remplacer le menu, ils seraient libres de le faire. Pensées?
EDIT 1
Bainternet remporte le prix. Voici ce que j'ai fait, légèrement modifié par rapport à sa solution:
J'ai enregistré sous condition un emplacement de menu
if( function_exists( 'bp_get_loggedin_user_nav' ) ){
register_nav_menu( 'lblgbpmenu', 'Default BuddyPress Menu' );
}
J'ai ensuite pris un appel conditionnel à la configuration du menu
if( function_exists( 'bp_get_loggedin_user_nav' ) ){
add_action( 'widgets_init', 'lblg_add_default_buddypress_menu' );
}
Enfin, j'ai enregistré le 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 );
}
}
}
Donc, fondamentalement, vous demandez comment créer un menu personnalisé par code et l’affecter à un emplacement de 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 );
Il vous suffit donc d'ajouter autant de liens que vous le souhaitez, de remplacer LOCATION_NAME
par le nom de l'emplacement actuel et de vous assurer que ce code n'est exécuté qu'une seule fois.
Votre appel à wp_nav_menu()
doit inclure une fonction de rappel personnalisée, telle qu'un appel à wp_list_pages()
, à laquelle vous pouvez passer un argument include
, dans lequel vous pouvez inclure des ID de page explicites.