web-dev-qa-db-fra.com

Comment enregistrer de manière conditionnelle des menus de navigation avec des champs personnalisés avancés?

J'ai un thème qui utilise des champs personnalisés avancés pour permettre à l'utilisateur de sélectionner différentes options d'en-tête. L'une des options d'en-tête (où le logo est placé au milieu de la page entre deux menus) nécessite l'enregistrement de trois nouveaux menus, un menu de gauche, un menu de droite et un menu mobile.

Lorsque vous sélectionnez l'option d'en-tête, il charge un fichier distinct nav-left-logo-mid-nav-right.php qui crée le code HTML pour le style d'en-tête spécifique.

J'ai le code suivant pour créer le menu:

add_action( 'after_setup_theme', 'menu_left_logo_mid_menu_right' );
function menu_left_logo_mid_menu_right() { 
    register_nav_menus( 
        array( 'left_menu'   => 'Left Menu', 
               'right_menu'  => 'Right Menu', 
               'mobile_menu' => 'Mobile Menu' )
     ); 
}

Cependant, je ne peux pas le faire fonctionner en dehors de functions.php. J'ai essayé d'ajouter add_action au fichier nav-left-logo-mid-nav-right.php mais les menus ne se sont pas enregistrés. Quoi que je fasse, le code register_nav_menus () ne peut pas être exécuté en dehors de functions.php.

Je souhaite uniquement que ces nouveaux emplacements de menu soient enregistrés lorsque cette option d'en-tête est sélectionnée. Cependant, je ne peux pas accéder aux champs personnalisés avancés dans functions.php, je ne suis donc pas vraiment sûr de le faire fonctionner.

Est-ce que quelqu'un sait comment faire en sorte que register_nav_menus () fonctionne en dehors de functions.php?

2
qotsa42

Vous pouvez accéder aux valeurs ACF dans functions.php et vous devrez le faire.

L'enregistrement des menus dans le fichier de modèle ne fonctionnera pas, car les modèles sont chargés après l'exécution de after_setup_theme. Donc, si vous ajoutez une action à ce raccord dans le fichier de modèle, cette action ne s'exécutera pas - elles sont enregistrées trop tard ...

1
Krzysiek Dróżdż