Come aggiungere lo stato attivo ai link di navigazione?

13 gen 2015, 19:45:11
Visualizzazioni: 14.4K
Voti: 0

Sto cercando di aggiungere gli stati attivi per il mio menu di navigazione personalizzato, ma finora tutto quello che provo non funziona. Ho impostato il menu di navigazione in un file separato nav.php, poi ho incluso nav.php nel mio file header.php in questo modo:

<?php include('nav.php'); ?>

Ho creato pagine personalizzate di Wordpress nella cartella child e incluso header.php subito dopo il nome del template:

<?php /* Template Name: Pagina di Design del Sito*/
 ?>

<?php get_header(); ?>

Ecco il mio codice html e php attuale in nav.php e ho aggiunto un attributo id univoco "currentpage" per indicare quale voce di menu riflette la pagina corrente dell'utente:

<ul id="menu" class="clearfix">                
                <li<?php if ($thisPage=="About") 
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/about" title="Pagina di benvenuto" class="parent-link menu-item-2" id="main-menu-item-4">About</a></li>                               

                <li<?php if ($thisPage=="Portfolio") 
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/portfolio" class="parent-link menu-item-3">Portfolio</a></li>               

                <li<?php if ($thisPage=="Services") 
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/services" class="parent-link menu-item-4">Servizi</a></li> 

                <li<?php if ($thisPage=="Prices") 
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/prices" class="parent-link menu-item-5">Prezzi</a></li>                

</ul>                                                        

E questo è il mio CSS per gli stati hover e attivo:

ul#menu li a:hover {
background-color: #999999;
color: #fff; 
}

ul#menu li #currentpage a {
background: #fff;
color: #333;
}

Per ogni pagina ho assegnato il valore dopo il nome del template, ecco la mia Home page:

<?php /* Template Name: Pagina di Design del Sito
*/
 ?>
<?php $thisPage="Home"; ?>

<?php get_header(); ?>

Spero che qualcuno possa aiutarmi, davvero non capisco perché questo codice o qualsiasi altro codice php che provo non riesca a far funzionare questi menu personalizzati.

4
Commenti

Manca molto codice, è così incompleto, wow - per favore modifica la domanda così possiamo aiutarti. Saluti.

skim- skim-
13 gen 2015 19:48:42

Solo come suggerimento, quando aggiungi codice nell'editor, evidenzia il tuo codice e clicca sul simbolo {} appena sopra l'editor. Questo inserirà il tuo codice in un blocco di codice :-)

Pieter Goosen Pieter Goosen
13 gen 2015 20:03:15

Devi rendere $thisPage globale se vuoi farvi riferimento in altri file, vedi scope delle variabili in php. In generale è meglio evitare di rendere qualsiasi altra cosa globale se possibile. Probabilmente è meglio usare gli strumenti integrati di WordPress per i menu come suggerito nella risposta di @Dan.

Andrew Bartel Andrew Bartel
13 gen 2015 20:23:57

Grazie mille. Apprezzo molto il tuo sforzo e il link di riferimento che hai inviato per la documentazione. Sì, in effetti, credo sia meglio utilizzare gli strumenti integrati di WordPress e agganciare i miei stili per ottenere gli effetti desiderati.

Steven Donea Steven Donea
15 gen 2015 22:32:21
Tutte le risposte alla domanda 4
4

Se il tuo tema utilizza wp_nav_menu(), avrai la classe current-menu-item aggiunta automaticamente all'elemento <li> rilevante. Ti è stato utile?

13 gen 2015 19:51:06
Commenti

Ciao Dan, è un menu personalizzato con l'id #menu, ma ora l'ho cambiato in wp_nav_menu e ho anche modificato il css. Dovrei eliminare anche questo codice php da tutti gli li con elenco puntato: <?php if ($thisPage=="About") echo " id=\"currentpage\""; ?>

Steven Donea Steven Donea
13 gen 2015 20:23:23

Perché non usi semplicemente la funzione wp_nav_menu() invece di creare manualmente il tuo menu?

Dan Dan
14 gen 2015 14:39:08

Ciao Dan, hai ragione riguardo all'uso della funzione wp_nav_menu(), piuttosto che affrontare la complicazione di crearne uno manualmente. Quindi ho ripristinato la navigazione di WordPress e ora ho questo: <div id="access" role="navigation"> <?php wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary' ) ); ?> </div> ora l'unico problema è quando devo stilizzare i menu, prima di tutto non riesco a far fluttuare i menu a destra.

Steven Donea Steven Donea
15 gen 2015 02:19:52

Probabilmente dovrai modificare i selettori CSS per funzionare con l'HTML che WordPress genera per te. Normalmente l'elemento <ul> ha una classe "menu", non un id come nel tuo esempio di codice.

Dan Dan
15 gen 2015 11:38:44
0

Quello che farei è rimuovere tutto quel codice che hai in nav.php che mostra il menu, creare il menu all'interno del backend di WordPress, così potrai usare .current-menu-item nel tuo css.

Poi tutto ciò che ti servirà per richiamare il menu sarà wp_nav_menu();

Ecco la documentazione per questa funzione:

http://codex.wordpress.org/Function_Reference/wp_nav_menu

14 gen 2015 06:52:28
0

Nel tuo file PHP, imposta $thisPage prima di includere include('nav.php');. In questo modo, la variabile $thisPage verrà passata a nav.php e processata nel suo statement if.

Tuttavia, questa è una pratica davvero sconsigliata, e un modo migliore per farlo sarebbe creare il tuo menu direttamente in WordPress e integrarlo nel tuo template. WordPress documenta come farlo in modo chiaro.

15 gen 2015 08:13:49
0

Ho eliminato il file nav.php dal mio header.php, e ho reinserito il vecchio codice del menu che viene fornito con WordPress. Ho fatto alcuni hook nel mio file style.css per adattare gli stili al design desiderato e ho utilizzato solo #menu-navmenu che ho creato in WordPress per allineare a destra la mia barra del menu.

ul#menu-navmenu{float: right;}

Prima avevo questo ul#menu {float: right; margin: 15px;}

e ora ho aggiunto un margine di 15px a questo codice nel template style.css di WordPress:

#access .menu-header ul,
div.menu ul {
    list-style: none;
    /*margin: 0;*/margin: 15px;
}

Tutto funziona come previsto e grazie per tutto l'aiuto in questa questione, questa è una grande community WordPress.

16 gen 2015 03:12:45