web-dev-qa-db-fra.com

Où est défini l'emplacement du thème du menu principal dans un modèle WordPress?

Je suis assez nouveau dans WordPress (je viens de Joomla) et j'ai le doute suivant concernant le emplacement du thème du menu principal.

Par exemple, en utilisant le thème préinstallé Twenty Twelve, si je vais dans le backend, je vais dans: Apparence ---> Menus ---> Gérer l'emplacement Je peux assigner mon principal -menu uniquement à un emplacement du thème} nommé menu principal.

Je pense que cette zone se trouve dans le fichier header.php du thème Twenty Twelve (car mon menu principal est affiché dans l'en-tête de la page), mais je ne le trouve pas. est le header.php contenu:

<?php
/**
 * The Header template for our theme
 *
 * Displays all of the <head> section and everything up till <div id="main">
 *
 * @package WordPress
 * @subpackage Twenty_Twelve
 * @since Twenty Twelve 1.0
 */
?><!DOCTYPE html>
<!--[if IE 7]>
<html class="ie ie7" <?php language_attributes(); ?>>
<![endif]-->
<!--[if IE 8]>
<html class="ie ie8" <?php language_attributes(); ?>>
<![endif]-->
<!--[if !(IE 7) | !(IE 8)  ]><!-->
<html <?php language_attributes(); ?>>
<!--<![endif]-->
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>" />
<meta name="viewport" content="width=device-width" />
<title><?php wp_title( '|', true, 'right' ); ?></title>
<link rel="profile" href="http://gmpg.org/xfn/11" />
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />
<?php // Loads HTML5 JavaScript file to add support for HTML5 elements in older IE versions. ?>
<!--[if lt IE 9]>
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script>
<![endif]-->
<?php wp_head(); ?>
</head>

<body <?php body_class(); ?>>
<div id="page" class="hfeed site">
    <header id="masthead" class="site-header" role="banner">
        <hgroup>
            <h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1>
            <h2 class="site-description"><?php bloginfo( 'description' ); ?></h2>
        </hgroup>

        <nav id="site-navigation" class="main-navigation" role="navigation">
            <h3 class="menu-toggle"><?php _e( 'Menu', 'twentytwelve' ); ?></h3>
            <a class="assistive-text" href="#content" title="<?php esc_attr_e( 'Skip to content', 'twentytwelve' ); ?>"><?php _e( 'Skip to content', 'twentytwelve' ); ?></a>
            <?php wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' ) ); ?>
        </nav><!-- #site-navigation -->

        <?php if ( get_header_image() ) : ?>
        <a href="<?php echo esc_url( home_url( '/' ) ); ?>"><img src="<?php header_image(); ?>" class="header-image" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="" /></a>
        <?php endif; ?>
    </header><!-- #masthead -->

    <div id="main" class="wrapper">

Où est ce Menu principal ou comment est-il défini dans le thème?

Tnx

Andrea

1
AndreaNobili

Les emplacements de menu sont définis dans functions.php

Vous pouvez lire le codex pour plus d’informations sur la définition des emplacements de menu dans functions.php

Enregistrer les menus

Premièrement, dans le functions.php de votre thème, vous devez écrire une fonction pour enregistrer les noms de vos menus. (Voici comment ils apparaîtront dans l'écran d'administration Apparence -> Menus.) Par exemple, ce menu apparaîtrait dans la zone "Emplacements des thèmes" sous la forme "Menu en-tête".

function register_my_menu() {
  register_nav_menu('header-menu',__( 'Header Menu' ));
}
add_action( 'init', 'register_my_menu' );

Et cela ferait apparaître deux options de menu, le menu en-tête et le menu supplémentaire -

function register_my_menus() {
  register_nav_menus(
    array(
      'header-menu' => __( 'Header Menu' ),
      'extra-menu' => __( 'Extra Menu' )
    )
  );
}
add_action( 'init', 'register_my_menus' );

Afficher les menus sur le thème

Une fois que vous avez fait cela, votre thème sera presque prêt. La dernière étape de préparation consiste à indiquer au thème où vous souhaitez que les menus apparaissent. Vous faites cela dans le fichier de thème approprié. Ainsi, par exemple, nous pourrions souhaiter que notre menu d'en-tête soit dans header.php. Alors ouvrez ce fichier dans l'éditeur de thème et décidez où vous voulez placer votre menu. Le code à utiliser ici est wp_nav_menu dont nous aurons besoin une fois pour chaque emplacement de menu. Alors, ajoutez ce code -

<?php wp_nav_menu( array( 'theme_location' => 'header-menu' ) ); ?>

Tout ce que vous avez à faire est de vous assurer que le thème emplacement_thème pointe sur le nom que vous avez fourni à votre menu dans le code functions.php ci-dessus. (Notez que c'est le menu d'en-tête utilisé ici plutôt que le menu d'en-tête sans trait d'union. Le menu d'en-tête est le nom que le code comprend, le menu d'en-tête est la version lisible par l'homme que vous voyez dans la page d'administration.)

Pour compléter le code, vous pouvez placer votre menu supplémentaire ailleurs. Vous voulez peut-être un menu sur l'une de vos pages, par exemple, et même un peu égayé avec un DIV contenant une certaine classe -

wp_nav_menu( array( 'theme_location' => 'extra-menu', 'container_class' => 'my_extra_menu_class' ) );

Ainsi, vous mettriez ce qui précède dans votre modèle de page, et non seulement le menu s'afficherait où que vous le placiez, il serait également appelé my_extra_menu_class afin que vous puissiez travailler avec cela en CSS.

7
Steve

Vous pouvez également ajouter un menu supplémentaire à partir de votre fichier functions.php enfant sans modifier aucun fichier de thème parent.

add_action( 'wp_head', 'add_extra_nav' ); 

function add_extra_nav() {

wp_nav_menu( array( 

'theme_location' => 'extra-menu', 

'container_class' => 'nav-menu' ) );

}

Changez simplement la classe de conteneur pour qu'elle soit identique à celle utilisée par votre thème et encapsulez la fonction dans une classe existante utilisée par votre thème pour un menu principal ou secondaire afin que vous n'ayez pas besoin d'ajouter de CSS. Vous pouvez normalement trouver cela dans le header.php.

Changez le hook wp_head en un autre hook spécifique à WordPress ou à un thème.

0
Brad Dalton