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 :

Sukellos WordPress Personnalisation Menu Administration

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 :

Copier

Le code :

Copier

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 :

Copier

Et voici un aperçu de ce que cela donne :

Copier

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 :

Copier

Le code intégral

Le code intégral comprenant les deux approches :

Copier

Quelques liens pour approfondir

Laisser un commentaire