Dove è definita la posizione del tema per il menu principale in un template WordPress?

18 gen 2014, 11:14:15
Visualizzazioni: 26.9K
Voti: 1

Sono abbastanza nuovo in WordPress (vengo da Joomla) e ho il seguente dubbio riguardo la Theme Location del menu principale.

Per esempio, usando il tema preinstallato Twenty Twelve, se nel backend vado in: Aspetto ---> Menu ---> Gestisci Posizioni posso assegnare il mio main-menu solo a una specifica posizione del tema chiamata Primary Menu.

Penso che questa area si trovi nel file header.php del tema Twenty Twelve (perché il mio menu principale viene mostrato nell'header della pagina) ma non riesco a trovarla, questo è il contenuto di header.php:

<?php
/**
 * Il template Header per il nostro tema
 *
 * Mostra tutta la sezione <head> e tutto fino a <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 // Carica il file JavaScript HTML5 per aggiungere il supporto agli elementi HTML5 nelle vecchie versioni di IE ?>
<!--[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( 'Vai al contenuto', 'twentytwelve' ); ?>"><?php _e( 'Vai al contenuto', '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">

Dove si trova questo Primary Menu o come viene definito nel tema?

Grazie

Andrea

1
Commenti

Esempio di aggiunta di una nuova posizione personalizzata per il menu nel tuo tema: http://goo.gl/TbxqDy

Suresh Kamrushi Suresh Kamrushi
30 set 2015 08:25:22
Tutte le risposte alla domanda 2
1
10

Le posizioni dei menu sono definite in functions.php

Puoi leggere il codex per maggiori informazioni su come definire le posizioni dei menu in functions.php

Registrare i Menu

Per prima cosa, nel file functions.php del tuo tema, devi scrivere una funzione per registrare i nomi dei tuoi menu. (Questo è come appariranno nella schermata di amministrazione Aspetto -> Menu.) Ad esempio, questo menu apparirà nella casella "Posizioni del tema" come "Menu Header".

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

E questo farebbe apparire due opzioni di menu, menu header e menu extra -

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

Visualizzare i Menu nel Tema

Una volta fatto ciò, il tuo tema sarà quasi pronto. L'ultimo passo di preparazione è dire al tema dove vuoi che i menu vengano visualizzati. Lo fai nel file del tema pertinente. Quindi, per esempio, potremmo volere che il nostro menu header sia in header.php. Quindi apri quel file nell'editor del tema, e decidi dove vuoi mettere il tuo menu. Il codice da usare qui è wp_nav_menu che avremo bisogno una volta per ogni posizione del menu. Quindi, aggiungi questo codice -

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

Tutto ciò che devi assicurarti è che theme_location punti al nome che hai fornito per il tuo menu nel codice functions.php sopra. (Nota che qui viene usato header-menu piuttosto che Menu Header senza un trattino. header-menu è il nome che il codice comprende, Menu Header è la versione leggibile dall'uomo che vedi nella pagina di amministrazione.)

Per completare il codice, puoi mettere il tuo menu extra da qualche altra parte. Forse vuoi un menu in una delle tue pagine, per esempio, e potresti anche volerlo abbellire un po' con un DIV contenitore di una certa classe -

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

Quindi inseriresti il codice sopra nel tuo template di Pagina, e non solo il menu apparirebbe dove l'hai messo, ma sarebbe stilizzato come my_extra_menu_class in modo che tu possa lavorarci con il CSS.

18 gen 2014 12:36:16
Commenti

Spiegazione perfetta !!!

AndreaNobili AndreaNobili
18 gen 2014 13:01:37
0

Puoi anche aggiungere un menu extra dal tuo file functions.php del child theme senza modificare i file del tema genitore.

add_action( 'wp_head', 'add_extra_nav' ); 

function add_extra_nav() {

wp_nav_menu( array( 

'theme_location' => 'extra-menu', 

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

}

Basta cambiare la classe del container con la stessa utilizzata dal tuo tema e avvolgere la funzione in una classe esistente che il tuo tema usa per un menu primario o secondario, così non dovrai aggiungere alcun CSS. Di solito puoi trovarlo nel file header.php.

Cambia l'hook wp_head con qualsiasi altro hook specifico di WordPress o del tema.

21 gen 2014 17:39:39