Wordpress - submenu w szablonie


(slepciu) #1

Witam

Tworzę szablon do Wordpress i mam taki problem. W głównym meny mam 5 pozycji (stron). Niektóre z nich mają swoje podstrony, a niektóre podstrony maja jeszcze kolejne podstrony.

W szablonie po lewej stronie ma pojawiać się kolumna, na tych stronach które mają submenu z wyborem tych stron. Do tego miejsca sobie radzę kodem:

if($post->post_parent)

        $children=wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");

    else

        $children=wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");

    if($children)

    {

        ?>

Menu

  • <?php echo $children; ?>

<?php }[/code]

Ale rzecz w tym, że jeśli, któraś z podstron ma kolejne podstrony, to one też się wyświetlają, a chciałbym, żeby wyświetlały się tylko po wybraniu rodzica. Wiem, że trudno może być zrozumieć o co mi chodzi, więc przykład:

Na tej stronie po wybraniu "Krankheiten" po lewej pojawia się submenu, ale jeśli w tym submenu klikniemy np "Allergie", to pojawi się kolejne subemenu (nie ma tu JS).

I o coś takiego właśnie mi chodzi.

Czy ktoś wie jak to osiągnąć?


(Xenvl) #2

A w czym chcesz to osiągnąć, w css czy php? W css

ul li ul{

display: none}

ul li.active ul{

display: block}

A w php sprawdź czy element ma w tablicy $classes klasę 'active' i jak ma, to wyświetl jego potomków - takie najprostsze rozwiązanie.


(slepciu) #3

Dzięki za podpowiedź, ale niestety nie rozwiązuje ona mojego problemu - może nie do końca jasno go opisałem.

W każdym razie już sobie poradziłem, nie wiem czy w najbardziej optymalny sposób, ale działa. Może komuś się przyda:

global $notfound;    if($notfound != '1')    {        //pobieramy aktualna strone        $current_page=$post-ID;        //tablica numerow id do wyswietlenia w menu        $ids=array();        while($current_page) {            //szukamy najstarszego rodzica            $page_query=$wpdb-get_row("SELECT ID, post_parent FROM $wpdb-posts WHERE ID = '$current_page'");            $current_page=$page_query-post_parent;            //wszystkiech pośrednich rodziców wpisujemy do tablicy            $ids[]=$page_query-ID;        }        //najstarszy rodzic        $parent_id=$page_query-ID;        //pobieramy wszystkie id stron dla ktorych nadrzednym jest strona najstarsza i jej potomkowie        $wynik=$wpdb-get_results("SELECT ID FROM $wpdb-posts WHERE post_parent IN (".implode(',',$ids).") AND post_type != 'attachment'");        foreach($wynik as $value)            $ids[]=$value-ID;

(adpawl) #4

http://codex.wordpress.org/Function_Ref ... list_pages - parametr depth :wink:


(slepciu) #5

Ten parametr znam, ale on niestety nie załatwia sprawy, ponieważ ustala tylko jak głęboko ma być zagnieżdżone menu, ale nie powoduje wyświetlania się pozycji wyższych. Dodatkowo powoduje, że rozwijane są wszystkie pozycje w menu, a ja potrzebuję, żeby główne pozycje były widoczne cały czas, a rozwinięta była tylko wybrana. Przykład http://www.zentrum-der-gesundheit.de/krankheiten.html obrazuje to o co mi chodzi. Po wybraniu Allergie pojawiają się pod nim kolejne pozycje, ale wszystkie inne pozostają bez zmian. Gdybym użył proponowanej przez ciebie funkcji uzyskał bym jedne z dwóch efektów (w zależności od parametrów):

  1. wszystkie menu były by cały czas rozwinięte

  2. po kliknięciu allergie całe menu znikło by i zostało by tylko menu allergie ze swoimi potomkami