Cum să adaugi starea activă la linkurile de navigație?

13 ian. 2015, 19:45:11
Vizualizări: 14.4K
Voturi: 0

Încerc să adaug stări active pentru meniul meu personalizat de navigație, dar până acum nimic din ce încerc nu funcționează. Am configurat meniul de navigație într-un fișier separat nav.php, apoi l-am inclus în fișierul header.php astfel:

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

Am creat pagini personalizate WordPress în directorul child și am inclus header.php imediat după numele template-ului:

<?php /* Template Name: Pagina de Design Website*/
 ?>

<?php get_header(); ?>

Iată codul meu HTML și PHP actual din nav.php unde am adăugat un atribut id unic "currentpage" pentru a indica care element de meniu reflectă pagina curentă a utilizatorului:

<ul id="menu" class="clearfix">                
                <li<?php if ($thisPage=="Despre") 
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/despre" title="Pagina de bun venit" class="parent-link menu-item-2" id="main-menu-item-4">Despre</a></li>                               

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

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

                <li<?php if ($thisPage=="Prețuri") 
echo " id=\"currentpage\""; ?> class="parent-item"><a href="/preturi" class="parent-link menu-item-5">Prețuri</a></li>                

</ul>                                                        

Și acesta este CSS-ul meu pentru stările hover și active:

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

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

Pentru fiecare pagină am atribuit valoarea după numele template-ului, iată pagina mea Principală:

<?php /* Template Name: Pagina de Design Website
*/
 ?>
<?php $thisPage="Principală"; ?>

<?php get_header(); ?>

Sper că cineva mă va putea ajuta, chiar nu înțeleg de ce acest cod sau orice alt cod PHP pe care îl încerc nu reușesc să fac aceste meniuri personalizate să funcționeze.

4
Comentarii

Lipsesc multe linii de cod, este atât de incomplet, wow - te rugăm să editezi întrebarea astfel încât să te putem ajuta. Salutări.

skim- skim-
13 ian. 2015 19:48:42

Doar ca sfat, când adaugi cod în editor, evidențiază codul tău și apasă pe semnul {} deasupra editorului. Acest lucru va adăuga codul tău într-un bloc de cod :-)

Pieter Goosen Pieter Goosen
13 ian. 2015 20:03:15

Trebuie să faci $thisPage global dacă intenționezi să îl referențiezi în alte fișiere, vezi domeniul variabilelor în php. În general, dorești să eviți să faci orice altceva global dacă poți evita acest lucru. Probabil că e mai bine să folosești instrumentele încorporate în WordPress pentru meniuri, așa cum sugerează răspunsul lui @Dan.

Andrew Bartel Andrew Bartel
13 ian. 2015 20:23:57

Mulțumesc mult. Apreciez foarte mult efortul tău și linkul de referință pe care l-ai trimis pentru documentație. Da, într-adevăr, cred că este mai bine să folosesc instrumentele încorporate în WordPress și să mă conectez la stilurile mele pentru a obține efectele dorite.

Steven Donea Steven Donea
15 ian. 2015 22:32:21
Toate răspunsurile la întrebare 4
4

Dacă tema ta folosește wp_nav_menu(), clasa current-menu-item va fi adăugată automat elementului <li> relevant. Te ajută asta?

13 ian. 2015 19:51:06
Comentarii

Salut Dan, este un meniu personalizat cu id-ul #menu, dar acum l-am schimbat în wp_nav_menu și am făcut și modificări în css. Ar trebui să șterg și acest cod php din toate li-urile cu bullet: <?php if ($thisPage=="About") echo " id=\"currentpage\""; ?>

Steven Donea Steven Donea
13 ian. 2015 20:23:23

De ce nu folosești pur și simplu funcția wp_nav_menu() în loc să creezi manual meniul?

Dan Dan
14 ian. 2015 14:39:08

Salut Dan, ai dreptate că e mai bine să folosești funcția wp_nav_menu(), decât să te complici să creezi unul manual. Așa că am readus navigația WordPress și acum am asta: <div id="access" role="navigation"> <?php wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary' ) ); ?> </div> singura problemă acum este când încerc să stilizez meniurile, în primul rând nu reușesc să fac ca meniurile să plutească la dreapta.

Steven Donea Steven Donea
15 ian. 2015 02:19:52

Probabil va trebui să modifici selectorii CSS pentru a funcționa cu HTML-ul generat de WordPress. În mod normal, elementul <ul> are o clasă "menu", nu un ID ca în exemplul tău de cod.

Dan Dan
15 ian. 2015 11:38:44
0

Ceea ce aș face este să elimin tot codul pe care îl ai în nav.php care afișează meniul, să creez meniul în backend-ul Wordpress, apoi vei putea folosi .current-menu-item în css-ul tău.

Apoi tot ce trebuie să faci pentru a apela meniul va fi wp_nav_menu();

Iată documentația pentru această funcție:

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

14 ian. 2015 06:52:28
0

În fișierul tău PHP, setează variabila $thisPage înainte de a include fișierul include('nav.php');. Apoi, variabila $thisPage va fi transmisă către nav.php și procesată în instrucțiunea sa if.

Aceasta este cu adevărat o practică proastă, iar o metodă mai bună de a face acest lucru ar fi crearea meniului direct în WordPress și conectarea lui în șablonul tău. WordPress documentează cum să faci asta într-un mod corect.

15 ian. 2015 08:13:49
0

Am șters fișierul nav.php din header.php, și am adăugat înapoi codul vechi de meniu care vine cu WordPress. Am făcut câteva modificări în fișierul style.css pentru a ajusta stilurile conform designului dorit și am folosit doar #menu-navmenu pe care l-am creat în WordPress pentru a alinia meniul la dreapta.

ul#menu-navmenu{float: right;}

Înainte aveam acest cod ul#menu {float: right; margin: 15px;}

iar acum am adăugat marginile de 15px în acest cod din fișierul style.css al șablonului WordPress:

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

Totul funcționează conform așteptărilor și vă mulțumesc pentru ajutorul oferit în această problemă, aceasta este o comunitate WordPress minunată.

16 ian. 2015 03:12:45