Menu et sous-menu BuddyPress par défaut
Un clic sur un menu BuddyPress ouvre un de ses sous-menus par défaut. Par exemple, Activités
ouvre par défaut Mes activités
. Il est possible de modifier ce comportement en désignant un autre sous-menu par défaut, par exemple Mes favoris
:
Cet article montre deux manières d’y parvenir :
- Utiliser un hook BuddyPress
- Interagir avec l’API BuddyPress
Utiliser un hook BuddyPress
Le moyen le plus direct est d’utiliser le filtre bp_default_component_subnav
qui prend deux paramètres :
$value
: Le slug du sous-menu par défaut à sélectionner lors du clic$r
: Les paramètres du menu de navigation
Le contenu de ces paramètres pour le menu Activités
:
Le code :
Il suffit de retourner la valeur favorites
lorsque ce filtre est appelé pour le menu Activités
.
Mais alors la question qui se pose est la suivante :
- Comment connaître les slugs des autres sous-menus ?
- Plus précisément, comment savoir que c’est très exactement
favorites
que je dois retourner ?
Et bien la réponse n’est pas si simple, mais elle a le mérite d’exister. Il existe en effet une fonction qui donne un aperçu de l’arborescence complète du menu en cours d’affichage : get_item_nav()
.
- Première difficulté : elle est définie dans la classe
BP_Core_Nav
. Il faut donc accéder à l’instance de cette classe pendant l’exécution. - Deuxièmement, elle doit être appelée lorsque la construction du menu de navigation est terminée, afin d’obtenir une réponse complète… ce qui n’est pas le cas lors de l’appel du filtre
bp_default_component_subnav
.
La solution est de l’appeler juste avant l’affichage du menu, dans une action qui s’apelle bp_actions
, de la manière suivante :
Et voici un aperçu de ce que cela donne :
L’instance de BP_Core_Nav
est accessible ainsi : buddypress()->members->nav;
Cela constitue une bonne transition pour introduire la deuxième manière de modifier ce sous-menu par défaut. En effet, quitte à utiliser cette action bp_actions
, pourquoi ne pas interagir directement avec des fonctions du coeur de BuddyPress.
Interagir avec l’API BuddyPress
Ce hook action bp_actions
est appelé juste avant l’affichage du menu. C’est le moment idéal pour modifier ce dernier.
Dans ce cas précis, la fonction bp_core_new_nav_default
doit être utilisée. Elle attend des paramètres sous la forme d’un tableau avec les clefs suivantes :
'parent_slug'
: Slug du parent.'screen_function'
: Nom de la fonction à exécuter lors du clic'subnav_slug'
: Slug du sous-menu à afficher lors du clic
screen_function
est facultatif dans mon cas, donc je lui passe seulement les autres paramètres en appliquant la modification souhaitée vers favorites
:
Le code intégral
Le code intégral comprenant les deux approches :