web-dev-qa-db-fra.com

Comment définir par programme un menu pour qu'il soit le menu principal?

J'ai déjà lu Comment passer d'un menu à l'autre par programmation? mais cela ne répond pas vraiment à la question. La réponse acceptée n'est que deux solutions de contournement mais pas une réponse réelle à la question.

Lorsque mon thème est activé, je crée plusieurs menus et j'aimerais en choisir un comme étant le menu principal.

Existe-t-il une fonction wordpress que je peux appeler pour rendre mon menu créé par programmation le menu principal? Je suis un développeur expérimenté, mais je ne connais pas Wordpress et la terminologie utilisée dans les fonctions rend très difficile la recherche dans le codex pour trouver ce que je cherche. Toute aide est appréciée.

2
Kenny Wyland

J'ai fouillé dans le code wordpress pour voir ce qui se passait lorsque j'ai soumis le formulaire à partir de l'interface utilisateur d'administration pour voir quelle fonction il appelait (et ai fait un var_export() sur la variable transmise) et l'ai vu appeler set_theme_mod( 'nav_menu_locations', $menu_locations );. J'ai mis à jour mon code pour l'utiliser et il semble fonctionner:

$locations = get_theme_mod('nav_menu_locations');
$locations['primary'] = $menu_id;
set_theme_mod( 'nav_menu_locations', $locations );

Une des choses qui m'a déstabilisée lorsque j'essayais de comprendre comment faire est que la documentation de get_theme_mod() indique qu'elle renvoie une chaîne, mais dans ce cas, elle renvoie un tableau et je ne pensais donc pas que c'était le cas. Aller au travail.

4
Kenny Wyland

On dirait que vous cherchez ceci:

Ajouter à functions.php

$locations = get_theme_mod('nav_menu_locations');
$locations['primary-menu'] = $term_id_of_menu;
set_theme_mod( 'nav_menu_locations', $locations );

Source: https://stackoverflow.com/a/19637827/7243209

2
Liam Stewart