Ujarzmić menu w WordPressie – jak zrobić nieklikalnego rodzica

Menu w WordPressie z nieklikalnym rodzicem
Jeden z czytelników tego blogu zadał pytanie, jak wykonać rozwijalne menu w WordPressie, które będzie mieć nieklikalnego rodzica. W tym artykule pokażę, w jaki sposób dostosować menu w WordPressie, aby ociągnąć ten cel.

Przy okazji dowiesz się, jak przejąć kontrolę nad generowaniem menu w WordPressie, która pozwoli na bardziej elastyczne dostosowanie go do własnych potrzeb.

Uwaga!
Po opublikowaniu tego artykułu z komentarzy dowiedziałam się, jak to zrobić szybko i prosto:

  1. Wejdź w Wygląd->Menu
  2. W obszarze Własne odnośniki w polu Adres URL wpisz (tymczasowo) cokolwiek, w polu Etykieta wpisz tytuł rodzica.
  3. Kliknij Dodaj do menu.
  4. Wykasuj zawartość pola Adres URL.
  5. Zapisz menu

Artykuł mimo wszystko pozostawiam, gdyż pokazuje, jak przejąć zupełną kontrolę nad generowaniem menu. Będzie przydatny dla programistów do wielu innych zastosowań.

Cel:

Wygenerowanie w WordPressie dwupoziomowego menu, którego pozycje-rodzice są nieklikalne.

Dla kogo:

Ten artykuł jest dla Ciebie jeśli:

  • implementowałaś/eś już menu w WordPressie za pomocą funkcji wp_nav_menu
  • szukasz rozwiązania, które pozwoli na wygenerowanie kodu HTML menu w dowolnej postaci
  • rozwiązania tego problemu za pomocą JavaScript i jQuery Cię nie satysfakcjonują
  • posiadasz podstawową wiedzę o WordPressie, plikach CSS i php pozwalającą na dokonywane drobnych zmian w kodzie

Opis problemu

Zacznijmy od przykładu. Standardowy motyw WordPressa Twenty Eleven wyświetla strony w postaci eleganckiego menu rozwijalnego, które wygląda mniej więcej tak:

Przykład 1 – menu z rodzicem klikalnym

Zwróćmy uwagę, że wszystkie z tych pozycji są „klikalne”, zarówno pozycje pierwszego poziomu (rodzice) jak i wszystkie pozycje im podrzędne (dzieci). Po najechaniu kursorem myszy nad dowolny z tych elementów pojawia się „łapka”, sugerująca, że pod daną pozycją kryje się przejście do jakiejś podstrony.

Niżej prezentuję menu, które wyglada niemal identycznie jak powyższe, z tą tylko różnicą, że pozycje-rodzice są nieklikalne:

Przykład 2 – menu z rodzicem nieklikalnym

 

Czym różni się menu z rodzicem klikalnym od nieklikalnego

Dlaczego wykonanie menu z nieklikalnym rodzicem w WordPressie nie jest banalną sprawą? Okazuje się, że ta, z pozoru drobna różnica, nie jest taka prosta do realizacji w WordPressie. Żeby zrozumieć dlaczego, zobaczmy najpierw kod html odpowiadający obu wygenerowanym menu:

Kod HTML generujący menu z rodzicem klikalnym:

<ul>
	<li><a href="#">rodzic 1</a>
	<ul class="sub-menu">
		<li><a href="#">dziecko 1.1</a></li>
		<li><a href="#">dziecko 1.2</a></li>
	</ul></li>
	<li><a href="#">rodzic 2</a>
	<ul class="sub-menu">
		<li><a href="#">dziecko 2.1</a></li>
		<li><a href="#">dziecko 2.2</a></li>
		<li><a href="#">dziecko 2.3</a></li>
		<li><a href="#">dziecko 2.4</a></li>
	</ul></li>
	<li><a href="#">rodzic 3</a>
	<ul class="sub-menu">
		<li><a href="#">dziecko 3.1</a></li>
		<li><a href="#">dziecko 3.2</a></li>
		<li><a href="#">dziecko 3.3</a></li>
	</ul></li>
</ul>

Kod HTML generujący menu z rodzicem nieklikalnym:

<ul>
	<li>rodzic 1
	<ul class="sub-menu">
		<li><a href="#">dziecko 1.1</a></li>
		<li><a href="#">dziecko 1.2</a></li>
	</ul></li>
	<li>rodzic 2
	<ul class="sub-menu">
		<li><a href="#">dziecko 2.1</a></li>
		<li><a href="#">dziecko 2.2</a></li>
		<li><a href="#">dziecko 2.3</a></li>
		<li><a href="#">dziecko 2.4</a></li>
	</ul></li>
	<li>rodzic 3
	<ul class="sub-menu">
		<li><a href="#">dziecko 3.1</a></li>
		<li><a href="#">dziecko 3.2</a></li>
		<li><a href="#">dziecko 3.3</a></li>
	</ul></li>
</ul>

Przykłady te różnią się tym, że w przypadku menu z rodzicem klikalnym wszystkie pozycje są zaimplementowane za pomocą znaczników <a href=””></a> zagnieżdżonych w znaczniku <li></li>. Obecność znacznika <a> powoduje jego „klikalność” i pojawienie się nad nim znajomej łapki podczas najazdu myszą.

W drugim przykładzie elementy odpowiadające za wyświetlenie rodziców nie zostały zaimplementowane za pomocą znaczników <a href=””></a>, w związku z tym są „nieklikalne”.

WordPress generuje wszystkie pozycje menu jako odnośniki (<a href=””></a>). I w tym tkwi problem. Gdybyśmy w jakiś sposób mogli powiedzieć WordPressowi, żeby w szczególnych przypadkach nie otaczał wybranych pozycji menu znacznikami <a href=””></a>, moglibyśmy osiągnąć zamierzony efekt.

Jak zmusić WordPressa, żeby wygenerował menu z nieklikalnym rodzicem

Okazuje się, że możemy to zrobić, rozszerzając odpowiednią WordPressową klasę Walker. Klasa Walker, mówiąc w uproszczeniu, odpowiada za generowanie wynikowego HTML-a dla różnych obiektów o strukturze drzewa. Nas interesuje „dobranie się” do tej klasy Walker, która kryje się za wyświetlaniem menu. Jest to klasa Walker_Nav_Menu.

Rozwiązanie będzie polegać na tym, że napiszemy własną klasę, która zrobi to wszystko, co standardowa Walker_Nav_Menu i dodatkowo to, co chcemy. Żeby nie wywarzać drzwi już otwartych i nie pisać wszystkiego od początku, wystarczy skopiować tę klasę z core’owego pliku WordPress’a i zmienić tylko te miejsca, które nas interesują.

Tworzenie menu z nieklikalnym rodzicem – kroki

Krok 0. Rejestracja funkcji wp_nav_menu

Najpierw musimy przygotować nasz motyw na obsługę menu za pomocą funkcji wp_nav_menu. Ten krok nie różni się niczym od typowego kroku, który musimy wykonać, chcąc umożliwić użytkownikowi obsługę menu za pomocą panelu Wygląd->Menu.

W tym celu do pliku functions.php w katalogu z naszym motywem dodajemy linie:

add_action( 'init', 'register_my_menus' );
function register_my_menus() {
	register_nav_menus(
		array(
			'primary-menu' => __( 'Primary Menu' )
		)
	);
}

Krok 1. Utworzenie własnej klasy Walker_Nav_Menu

Wchodzimy w edycję pliku functions.php w katalogu z naszym motywem. I wpisujemy następujący kod:

class My_Walker extends Walker_Nav_Menu {

}

W tym momencie powiedzieliśmy WordPressowi, że nasza klasa odpowiedzialna za wygenerowanie menu (My_Walker) ma się zachowywać tak samo jak standardowa klasa Walker_Nav_Menu.

Krok 2. Znalezienie WordPressowej funkcji generującej odpowiedni fragment menu

Fragment klasy Walker_Nav_Menu
nav-menu-template.php

Teraz spróbujemy wypełnić ciało utworzonej klasy, w celu napisania własnej funkcji wyświetlającej menu. Właściwie nie musimy implementować wszystkich części składających się na całe menu. Interesuje nas tylko część kodu, która wyświetli ten fragment menu, który chcemy zbudować nieco inaczej niż robi to WordPress. Musimy zachować zgodność wygenerowanego kodu z tym, co oferuje WordPress, dlatego najlepiej jest skopiować odpowiednią funkcję z core’owego pliku WordPress’a i zmienić jedynie te miejsca, które nas interesują.

Dlatego otwieramy (tylko do odczytu) plik wp-includes/nav-menu-template.php klasy Walker_Nav_Menu. W ciele tej klasy szukamy funkcji, która odpowiada za generowanie interesującego nas kawałka kodu HTML. W tym przypadku będzie to funkcja start_el (odpowiada za wygenerowanie elementu <li>, a raczej jego początkowej części), zobacz rysunek obok. Zaznaczamy ten fragment kodu i kopiujemy do ciała klasy My_Walker utworzonej w kroku 1.

Na potrzeby tego artykułu wykorzystany został fragment klasy Walker_Nav_Menu w wersji WP 3.2.1 i definicja funkcji start_el (zobacz kod w kroku 3.)

Krok 3. Dostosowanie kodu generującego menu do własnych potrzeb

Zastanówmy się, co mamy zrobić, żeby wyłączyć klikalność niektórych elementów. Wiemy już, że wyłączenie klikalności w naszym przypadku będzie się sprowadzać do pozbycia się znaczników <a href=””></a> dla pozycji najwyższego poziomu.

W celu rozróżnienia, który element jest elementem menu najwyższego poziomu posłużymy się zmienną $depth, która przyjmuje wartość zerową tylko dla stron/kategorii najwyższego poziomu. Zatem modyfikacja standardowej funkcji budującej menu opierać się będzie na tym, że znaczniki <a></a> zastosujemy tylko dla stron dzieci. W naszym przykładzie (dwupoziomowe menu) będą to te, które są niżej w hierarchii stron (mają depth większą od zera). Wprowadzone przez nas modyfikacje podświetlono w poniższym fragmencie kodu:

class My_Walker extends Walker_Nav_Menu {
	function start_el(&$output, $item, $depth, $args) {
		global $wp_query;
		$indent = ( $depth ) ? str_repeat( "t", $depth ) : '';

		$class_names = $value = '';

		$classes = empty( $item->classes ) ? array() : (array) $item->classes;
		$classes[] = 'menu-item-' . $item->ID;

		$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
		$class_names = ' class="' . esc_attr( $class_names ) . '"';

		$id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
		$id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';

		$output .= $indent . '<li' . $id . $value . $class_names .'>';

		$attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
		$attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';
		$attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) .'"' : '';
		$attributes .= ! empty( $item->url )        ? ' href="'   . esc_attr( $item->url        ) .'"' : '';


		$item_output = $args->before;
		if ($depth != 0)
			$item_output .= '<a'. $attributes .'>';
		$item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
		
		if ($depth != 0)
			$item_output .= '</a>';
		$item_output .= $args->after;

		$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
	}

}

Krok 4. Wywołanie menu za pomocą nowej funkcji

Teraz musimy jeszcze powiedzieć naszemu motywowi, żeby do wyświetlenie menu wykorzystał zmodyfikowaną przez nas klasę. W pliku odpowiedzialnym za wyświetlenie menu (zwykle będzie to header.php) wywołujemy funkcję wp_nav_menu, nieco inaczej niż zrobilibyśmy to standardowo:

<?php $walker = new My_Walker;
	wp_nav_menu(array('theme_location' => 'primary-menu', 'walker' => $walker));	?>

Jak widać w powyższym fragmencie kodu funkcja wp_nav_menu przyjęła dodatkowy parametr: walker, który jest obiektem naszej własnej, zdefiniowanej w kroku 3, klasy o nazwie My_Walker.

Krok 5. Utworzenie menu z zagnieżdżonymi poziomami w panelu admin.

Wykonanie menu hierarchicznego z poziomu panelu administracyjnego
Budujemy menu w panelu

Teraz w panelu administracyjnym wystarczy wejść w Wygląd->Menu i ułożyć menu zgodnie z wybraną przez nas hierarchią.

Na obrazku obok pokazano przykładową strukturę dwupoziomowego menu. Elementy z wcięciem (dzieci) zostaną potraktowane przez WordPressa jako pozycje z niezerową głębokością (zmienna depth w kroku 3).

Krok 6: Dostosowanie CSS-a

Gdybyśmy teraz podejrzeli kod HTML wygenerowanego przez nas menu, okaże się, że już spełnia on nasze oczekiwania: pozycje menu najwyższego poziomu są nieklikalne. Pozostaje jedynie odpowiednio doszlifować klasy CSS, pamiętając, że teraz część pozycji w menu nie zawiera już znaczników <a href=””></a>

Fragment pliku style.css z motywu Twenty Eleven zmodyfikowany pod kątem nieklikalnego rodzica. Podświetlono linie, które zmodyfikowane bądź dodano w stosunku do oryginału.

#access ul {
	font-size: 13px;
	list-style: none;
	margin: 0 0 0 0;
	padding-left: 0;
}

#access li,
#access a {
	color: #eee;
	display: block;
	line-height: 3.333em;
	padding: 0 10px;
	text-decoration: none;
}

#access ul ul li {
	background: #f9f9f9;
}

#access li:hover > a,
#access ul ul li:hover,
#access ul ul :hover > a,
#access a:focus {
	background: #efefef;
}

Inne zastosowania budowania menu w oparciu o własną klasę Walker_Nav_Menu

Implementując po swojemu klasę Walker_Nav_Men możemy osiągnąć inne ciekawe efekty w wyświetlaniu menu, np.:

  • wykonać menu oparte na obrazkach
  • dla każdej z pozycji menu dodać jej dodatkowy opis

Użytkownikowi pozostawimy elastyczność modyfikowania takiego menu na poziomie pracy z ekranem Wygląd->Menu i wykorzystaniu dodatkowych pól takich jak na przykład description. Ale to już temat na osobny artykuł…

Jaki był Twój problem z menu w WordPressie?

A czy Ty też miałaś/-eś jakiś problem z dostosowaniem menu WordPressa do uzyskania określonego efektu? Co to było? A może nie znalazłeś dobrego rozwiązania? Zapraszam do dzielenia się opiniami i pytaniami w komentarzach.

150 myśli do „Ujarzmić menu w WordPressie – jak zrobić nieklikalnego rodzica”

  1. Oj, chyba przykłady się nieco pomyliły 🙂 W przykładzie 1 rodzic jest zdecydowanie klikalny, a w przykładzie 2 nieklikalny 🙂

    A poza tym bardzo interesujący artykuł!

  2. Witam, mam takie pytanie. Czy jest możliwe wygenerowanie menu z divami i class’ami takimi jakie podam w tej funkcji Walker_nav_menu? Bo obecnie do całego menu dodaje mi diva o klasie menu, oraz klasy do poszczególnych li oraz ul, a ja chciałbym na sztywno przypisać np. ul swoją klasę.

    1. Ja bym „inwestowała” we własnego walkera w ostateczności.

      Możesz najpierw spróbować nadać swoją nazwę klasy na poziomie całego menu, jako jeden z paramentów w funkcji wp_nav_menu: http://codex.wordpress.org/Function_Reference/wp_nav_menu (menu_class)

      Możesz też spróbować zrobić tak: wchodzisz w Wygląd->Menu i klikasz na górze w „Opcje ekranu”. Rozwinie Ci się panel, na którym zaznaczasz „Klasy CSS”. Wówczas przy każdej dodanej stronie do menu masz możliwość wpisania własnej klasy.

      Nie wiem, na ile te możliwości sprawdzą się w Twoim konkretnym przypadku. Jeśli nie, to pozostaje wgryźć się w walkera.

        1. Dziękuję za komentarz. Dzięki niemu dowiedziałam się o istnieniu Twojego bloga, który mnie zaciekawił.

      1. niestety ostatnio przekonałam się, że ten szybki sposób z tymczasowym adresem w odnośniku, nie zawsze działa w menu na mobile, nie we wszystkich motywach.
        pozdrawiam i dzięki za artykuł

  3. Witam ponownie, twoje rady (Aga) pomogły i już sobie z tym menu poradziłem. Mam kolejne pytanie (wiem, że nie w tym wątku powinienem to pisać, ale spróbuję). Czy jest możliwość dodania podpisu pod miniaturką w NexGen Gallery? Starałem się wyszukać takiej możliwości w opcjach, ale niczego takiego nie znalazłem. Z góry przepraszam, że zaśmiecam ten temat ale pilnie potrzebuję tej informacji;)

    1. Fajnie, że z menu dałeś radę.

      Jeśli chodzi o NextGen Gallery. Jeżeli trochę orientujesz się w HTML-u, CSS-ie i nawet tylko odrobinę w php, to możesz sobie dostroić templatkę wyświetlającą galerię do własnych potrzeb zupełnie dowolnie. Wchodzisz do katalogu plugins/nextgen-gallery/view/ i albo modyfikujesz plik gallery.php albo tworzysz na jego wzór własny.

      Dodajesz w tym pliku, w miejscu gdzie chcesz, kod odpowiedzialny za wyświetlenie description albo alttext, który możesz edytować potem z poziomu panelu.

      Nie wiem, jaki jest Twój poziom zaawansowania, więc jeśli te informacje będą niejasne, daj znać, rozwinę temat.

  4. Dzięki za pomoc z tą galerią, udało mi się uzyskać zadowalający efekt. Jednak znów muszę poprosić o pomoc;)
    Mam w szablonie 4 bloki i w każdym z tych bloków mam zdjęcie. Czy jest jakaś możliwość dopisania jakiejś funkcji motywu dzięki czemu będę mógł zmieniać te obrazki z poziomu PA? chodzi mi o najzwyklejszą możliwość zmiany obrazków.

    1. Nie jestem pewna czy zrozumiałam pytanie.

      Jeśli masz zainstalowany plugin NextGen gallery, to edycję zdjęć (dodawanie, usuwanie, zmiana ich kolejności, dopisywanie tytułów, opisów itd.) zmieniasz z poziomu panelu administracyjnego wchodząc w Galeria->Zarządzaj Galerią, a naste pnie klikając w tytuł odpowiedniej galerii. Oczywiście o ile wcześnie założyłeś te galerie i dodałaś do nich obrazki również poprzez ten plugin (Galeria->Stwórz galerię).

      W templatce nie odwołujemy się do konkretnych zdjęć. Jest to jedynie szablon, na poziomie którego można dodać własne klasy CSS, które pomogą nam lepiej zapanować nad własnym formatowaniem galerii i/lub wyświetlić galerię inaczej niż umożliwiają to gotowe templatki dostarczone z pluginem.

      Gdyby coś było nie jasne, pytaj śmiało.

      1. nie, nie, nie, nie chodziło mi w tym przypadku o next gen’a. Chodziło mi o coś w stylu zmiany header poprzez funkcję get_header_images (jeśli dobrze pamiętam). czyli jakiś formularzyk, przez którego będę mógł wrzucać grafikę i onośnik do jej wyświetlenia w miejscu templaki, gdzie go ustawię.

        1. No to faktycznie się rozminęliśmy 🙂
          Czy to chodzi o to, żeby osoba edytująca treść mogła sobie wejść w edycję strony, z jej poziomu załadować zdjęcie/a z dysku (lub innej lokalizacji), które potem pojawią się w określonych miejscach na stronie? Im bardziej precyzyjnie opiszesz, co chcesz osiągnąć, tym większe szanse, że tym razem się zrozumiemy 🙂

    1. Dopiero teraz zauważyłam ten komentarz.
      To już mi nieco rozjaśniło. Teraz pytanie, czy te obrazki są przypięte do jakiś stron? To znaczy każdy z nich jest skojarzony z jakąś konkretną podstroną (albo wpisem)?

        1. Widzę na obrazku, który podałeś, że każdy obrazek jest „przypisany” (w sensie logicznym) do jakiejś strony np. ten z wiatrakami do „Rezerwacja”, ten z wybrzeżem do „Region”. Jeśli „Rezerwacja” i „Region” to są u Ciebie strony w WP, to możesz na poziomie każdej z tych stron wstawić te obrazki jako tzw. miniatura wpisu (ang. featured image). To się robi właśnie z poziomie panelu i dzięki temu w dowolnej chwili będziesz mógł podmienić zdjęcie.

          Potem w szablonie odpowiadającym za wygenerowanie tej strony z blokami musisz odwołać się do tych stron i za pomocą funkcji get_the_post_thumbnail wyświetlić obrazek.

          Jeśli potrzeba będzie więcej szczegółów, daj znać. Teraz chciałam się upewnić, czy takie rozwiązanie jest dla Ciebie OK.

          1. treść tych bloków jest pobierana z odpowiednich wpisów, ale kod zaczyna się od nagłówka z daną kategorią, pokażę Ci przykład jednego bloku, wtedy zobaczysz jak ja to mam:

            <img src="” width=”” height=”” alt=”Header Image” />
            Gościniec

            ‚gosciniec’, ‚posts_per_page’ => -1 ) );
            ?>

            <a style="padding-right:10px;" href="”>>Dowiedz się więcej

          2. Kurczę, sorki, że tak miotam te komentarze, ale znowu się pewnie nie zrozumiemy. W linku <img src=""… użyłem na próbę get_header_image() ale pierwotnie miałem zwykły odnośnik do pliku ze zdjęciem.

          3. Jeżeli u Ciebie obrazek jest przypisany do kategorii, to najprościej będzie Ci zainstalować wtyczkę Category Icons Lite.

            Dzięki niej będziesz mógł uploadować dowolny obrazek przez menu Media w PA i przypisać go do wybranej kategorii. Podczas uploadu zobaczysz dodatkowe pole z listą wszystkich kategorii. Wybierzesz sobie tą którą chcesz mieć przypisaną do danego obrazka.

            A następnie w swoim kodzie, w miejscu w którym chcesz wyświetlić ten obrazek odwołasz się do niego za pomocą funkcji:

            &lt;?php echo get_cat_icon_lite(7); ?&gt;
            

            Jako parametr (w przykładzie wyżej jest 7) podajesz w tej funkcji id wybranej kategorii. Jeśli jesteś w pętli przetwarzającej daną kategorię możesz to zrobić uniwersalnie np. tak:

            &lt;?php echo get_cat_icon_lite(get_query_var('cat')); ?&gt;
            

            Jedna uwaga. Ten plugin po instalacji automatycznie wyświetla ten obrazek również dla wszystkich wpisów danej kategorii. Możesz to wyłączyć wchodząc w wp-content/plugins/category-icons-lite/caticonslite.php i zakomentować linie zaczynające się od

            add_filter(‚the_title’…
            add_filter(‚wp_list_categories’…

            Tak radzi autor plugina, więc nie jest to jakaś ingerencja w kod na żywioł.

          4. Nawet nie wiem jak Ci dziękować. Udało się i teraz wszystko się ładnie wyświetla;) Jestem Ci baaardzo wdzięczny.

            A jest jakiś sposób (tak na przyszłość) żeby zrobić tą edycję tych zdjęć tak jak chciałem (tzn. osobna zakładka w PA), pytam z czystej ciekawości;)

          5. Fajnie, że się udało.

            Jeśli chodzi o temat własnej zakładki w panelu administracyjnym, to postaram się przygotować na to tutorial, bo już jesteś 3 osobą, która o to mnie pyta, a właściwie nie spotkałam takiego tutoriala na stronach w języku polskim. Niestety nie da się tego wyjaśnić w dwóch zdaniach.

            Kolejną kwestią jest dodanie w tej zakładce możliwości uploadu własnych zdjęć, są na to różne sposoby, ale omówienie każdego z nich też wymaga osobnego tutoriala.

            Jeśli chcesz osiągnąć ten efekt na zasadzie podmiany zdjęć do headera jak ma to miejsce w Twenty Ten, może ten tutorial będzie dla Ciebie pomocny:
            http://www.wpbeginner.com/wp-themes/how-to-enable-custom-header-images-panel-in-wordpress-3-0/.

            Jest jeszcze możliwość ugyzienia Twojego konkretnego przypadku od innej strony. Jeśli „Aktualności” „Gościniec” „Region”, oparlibyśmy w WP nie o kategorie, lecz o strony (jako strony rodzice) i resztę podstron ułożyli w hierarchię, to można by wykorzystać ładowanie ikony wpisu dla każdej z tych stron pierwszego poziomu i to byłoby rozwiązanie najprostsze.

  5. Witaj Agnieszko. Mam problem z edytowaniem szablonu, a konkretnie chodzi o to, ze z nagłówka,chciałabym usunąć zakładkę search. W miejscu w którym się ona znajduję, chciałabym umieścić w linii poziomej swoje własne menu z możliwością rozwinięcia zakładek. Jestem totalnym nowicjuszem. Próbowałam dokonać edycji według wskazówek podanych na tej stronie, ale chyba się „rzuciłam z motyką na słońce”. Nie mam już jakiejkolwiek koncepcji jak to zrobić. Szablon jest z WP. I w tym momencie stoję z dalszymi wpisami.

    1. Witaj Bożena,
      Nagłówek search jest zwykle wstawiany przez wywołanie funkcji get_search_form(); (najczęściej w pliku header.php).

      Jak nazywa się motyw, którego używasz? Czy to jest motyw pobrany gdzieś z sieci, który dostrajasz do własnych potrzeb? Skąd go można pobrać? Gdybym sobie roboczo zainstalowała ten motyw, wówczas więcej będę mogła pomóc.

  6. Witaj Aga. Motyw pobrany został ze strony http://wordpressthemesbase.com/page6.html i nosi nazwę Water Lily
    Sama sobie już poradziłam ze zmianą dotyczącą wielkości i stylu czcionki, a to dla mnie osoby nieznającej się, a uczącej się dopiero kodów i ich edytowaniu, kompletnie w tej dziedzinie zielonej, WIELKI SUKCES. Jestem z tego dumna.
    Pozdrawiam Bożena

    1. Hej Bożena, cieszę się, że masz taki zapał i pierwsze sukcesy na koncie. Tak trzymać. Zerknęłam na motyw. Nie jest on napisany najlepiej. Dużo rzeczy jest zrobionych niestandardowo, więc nie będzie Ci łatwo. Zakładkę serach usuniesz wchodząc do pliku header.php i usuwając całkiem blok zaczynający się od

      &lt;div id=&quot;menu_search_box&quot;&gt;
      

      do zamykającego go div’a.

      Niebieskie okienko do wyszukiwania jest jednocześnie częścią obrazka tła (w katalogu images/header.jpg), więc po usunięciu tego bloku na stronie wciąż będziesz widzieć ramkę z zaokrąglonymi rogami.

      Motyw ten niestety nie wspiera tworzenia własnego menu. Czy wiesz jak zrobić, żeby dopisać własne?

  7. Witam ponownie;)
    Mam takie pytanko jeszcze:
    mam utworzoną stronę główną (to ta z 4 blokami), mam ją wstawioną do index.php, czyli wyświetla się pierwsza, chciałbym jednak zrobić zakładkę w menu, która po kliknięciu będzie przenosić mnie do spisu wszystkich wpisów. Jak poprawnie utworzyć taki odnośnik?

    1. W panelu admin. w Ustawienia->Czytanie możesz przełączyć się na statyczna stronę (zamiast opcji domyślnej „Twoje ostatnie wpisy”) i tam, niżej wybrać stronę (w miejscu Strona z wpisami), z której nastąpi przejście do ostatnich wpisów.

      1. Nie oto mi chodziło.
        To znaczy mam zakodowaną strone, dajmy na to w pliku strona.php, i wygląda ona mniejwiecej tak:

        TUTAJ KOD HTML KTORY PRZYGOTOWALEM

        Jak mam ją wyświetlić w wordpressie?

        1. Ok, już sobie poradziłem:
          Wystarczyło utworzyć szablon dla strony, już pokazuję jak się go robi:

          Poniżej umieszcza się swój kod strony.
          Mam nadzieję, że się komuś przyda;)

  8. &lt;?php
    /*
    Template Name: Nazwa szablonu dla stronny
    */
    ?&gt;
    

    //Jeśli kod się nie wyświetli, to proszę o usunięcie tego komentarza lub jego poprawną edycję;)

  9. Przygotowałem nową statyczną stronę w WP, umieściłem w katalogu z motywem, nazwałem w sposób odpowiedni i teraz z tego szablonu nowej strony statycznej chciałem skorzystać. Mimo iż dodałem komentarz w PHP z nazwą szablonu to przy edycji strony nie mam wyboru pomiędzy szablonami. Czy w WordPressie 3.2.1 się coś zmieniło, czy może o czymś zapominam?

    1. Nie, nie zmieniło. Mi się też tak czasami zdarzało, np. kiedy robiłam nowy szablon na kopii innego, który był wcześniej podpięty już do jakiejś strony. Nie koniecznie taka przyczyna może być u Ciebie, ale na pewno coś nie gra.

      Może spróbuj zrobić prosty szablon jeszcze raz, upewnij się, że nazwa się nie powtarza i podepnij do zupełnie nowej (nowo utworzonej) strony.

  10. Dziękuję za szybką odpowiedź 🙂
    Zrobiłem mały test. Nazwałem plik page-informacje.php i tam umieściłem komentarz:

    a następnie stworzyłem nową stronę o tytule Informacje. Dzięki temu wczytując tą stronę WordPress skorzystał z szablonu page-informacje.php zamiast page.php.
    Całość więc działa. Pytanie tylko czy na zapleczu przy edytowaniu strony w części „Atrybuty strony” u Ciebie Aga jest oprócz wyboru rodzica i kolejności możliwość wyboru szablonu, z którego będzie korzystać dana strona.

    Kurs video z którego się uczę WordPressa podpowiada, że taki element powinien być.

    1. Kamil, chyba wcięło komentarz, który chciałeś wkleić do komentarza.

      Jeśli chcesz, żeby w panelu „Atrybuty strony” pojawił się jakiś szablon do wyboru, musisz rozpocząć go od komentarza jak niżej, np:

      &lt;?php 
      /*
      Template Name: Kamil
      */
      

      Wówczas powinieneś zobaczyć we wspomnianym miejscu szablon o nazwie Kamil. Nie ma znaczenia jak nazwiesz potem ten plik.

    1. A jesteś pewien, że wrzucasz plik we właściwe miejsce docelowe? Odświeżasz stronę w panelu admina po umieszczeniu pliku? Pewnie chodzi o jakiś drobiazg…

    1. Kamil, zrobimy test. Wysłałam Ci właśnie na maile pusty plik szablonu, który zawiera jedynie nagłówek. Powinno to wystarczyć, żebyś zobaczył to, czego nie widzisz. Daj znać, jaki jest efekt. U mnie wszystko gra.

  11. Wygląda na to, że to coś poważniejszego. Zrobiłem jak napisałaś. Przeniosłem plik do katalogu z szablonem czyli do /wp-content/themes/nazwaszablonu/ obok plików index.php, page.php, single.php i innych. Wylogowałem się i zalogowałem ponownie. Przy próbie dodawania strony nie pojawia się menu do zmiany szablonu. Testowałem na innej przeglądarce myśląc że to kwestia cache ale też nie pojawia się. 🙁

    1. OK, to przynajmniej mamy pewność, że robiłeś wszystko jak należy.
      Masz gdzieś indziej (na innym serwerze) jakiegoś innego WP postawionego, żebyś mógł tam sprawdzić?

  12. Zainstaluję Twenty Eleven (bo usunąłem pracując na czystym szablonie) i dam znać. Dzięki za sugestię. 🙂

    1. Dla Twenty Eleven powinieneś zobaczyć listę szablonów a w niej dwie pozycje:
      Showcasetemplate i Sidebartemplate.

  13. Działa! Dziękuję Ci bardzo 🙂
    Testowałem na Twenty Ten. Najwidoczniej w pustym szablonie ktoś się tego elementu pozbył.
    Tak swoją drogą, jeśli mogę zapytać to z jakiej metody korzystasz przygotowując stronę w WordPressie? Jakich Blank Theme albo Stalkers Theme używasz?

    1. Fajnie, że się wyjaśniło. Czy dobrze zrozumiałam: w szablonie na którym oparłeś swój motyw był jakiś fragment kodu, który wyłączał całkowicie wyświetlanie się tej części, tak?

      Tak swoją drogą, jeśli mogę zapytać to z jakiej metody korzystasz przygotowując stronę w WordPressie? Jakich Blank Theme albo Stalkers Theme używasz?

      Ja piszę wszystko „z palca.” Dostaję projekt graficzny na warstwach, na jego postawie robię stronę statyczną w HTML-u i CSS, a potem, jak już uzyskam zgodność z projektem przekładam to na WP na podobnej zasadzie jak opisałam w tym tutorialu. Nie próbowałam innych metod, nawet nie wiem, że są.

      Jadę w tym tygodniu na WordCamp do Poznania, liczę, że tam trochę się nauczę od innych wordpressowców.

  14. Najwidoczniej problem był z szablonem. Napisałem do osoby, która szablon dostarczyła, zobaczymy co odpisze. Jeszcze raz bardzo dziękuję za pomoc 🙂

    Ja też do momentu przygotowania HTML i CSS wszystko robię od podstaw. Potem niektórzy korzystają z motywów, które nie zawierają nic w środku, praktycznie żadnych stylów CSS, podstawowe skrypty interpretowane przez WordPressa, które się edytuje, ostylowuje.

    Dzięki też za informacje o WordCamp w Poznaniu.

    1. Jeśli chcesz, możesz spróbować samemu poszukać, czy ta część została wyłączona. O tym jak wyłączać poszczególne elementy w panelu admina na poziomie danego motywu, z poziomu functions.php, pisałam w tym artykule. Nie ma tam akurat linijki wyłączającej dokładnie ten element, ale chodzi o ideę, jak to się robi. Może uda Ci się wpaść na trop.

  15. Czy jest jakiś sposób na tymczasowe wyłączenie linka w menu (generowane przez wp_nav_menu), bez jego usuwania z menu? Przypuśćmy, że klient nie ma gotowej strony bloga, ale chce już mieć tą pozycję w menu widoczną.

    1. Marcin, nie znam jakiegoś prostego, intuicyjnego i uniwersalnego rozwiązania, ale do tematu podeszłabym tak:

      Sposób 1.
      Jeśli pozycje w menu górnym to strony (page) lub wpisy, to menu zostawiamy w spokoju i na poziomie pojedynczej strony lub wpisy decydowałabym, czy już jest gotowa na pokazanie światu, za pomocją statusu „private”. Czyli wchodzimy w edycję strony i oznaczamy ją jako prywatną.

      Później, w kodzie odpowiedzialnym za wyświetlenie zawartości sprawdzamy warunek:

      if ( isset($post-&gt;post_status) &amp;&amp; 'private' == $post-&gt;post_status )
      

      i np. nie pokazujemy zawartości strony jeśli jest prywatna.

      Wada: jeśli w menu wyświetlamy kategorię to nie zadziała.

      Sposób 2.
      Z poziomu zarządzaniem menu (Wygląd->Menu) strony które są jeszcze nie gotowe usuwam, jednak, żeby klient mógł je mimo wszystko zobaczyć w menu na swoich miejscach, zastępuję je atrapami korzystając z boksu z lewej strony na tym ekranie pt. „Własne odnośniki” i w miejsce Adresu URL podając znak #, a w miejsce Etykiety nazwę strony, którą chce widzieć klient.

      Sposób 3.
      Z poziomu zarządzaniem menu (Wygląd->Menu) wcześniej – w opcjach ekranu (na górze) – w części „Pokaż zaawansowane właściwości menu” pole „Opis”, a potem w tych elementach menu, które chcę „ukryć” właśnie w polu Opis daję jakiś umowny znacznik, np. „#”.

      Korzystam z własnego walker’a, na zasadzie jak opisany w tym tutorialu i dzięki „dobraniu się” do tego pola na poziomie każdego z elementów menu

      if ($item-&gt;description == '#')
      

      mogę zdecydować co z danym odnośnikiem zrobić np. zbudować go tak, aby prowadził donikąd, czyli

      &lt;a href=&quot;#&quot;&gt;&lt;/a&gt;
      

      Czy której z rozwiązań naprowadziło Cię na rozwiązanie problemu?

      P.S. Dzięki za ciekawą prezentację na WordCampie. Jak dla mnie była to jedna z lepszych prezentacji. Było bardzo przejrzyście (co osobiście wysoko cenię) i rzeczowo. Bardzo wartościowy był slajd (i przede wszystkim Twój komentarz do niego) „Kiedy warto” z przykładami (szczególnie tymi wynikłymi z Twojego doświadczenia), kiedy jest sens stosować motywy potomne.

  16. O raju! Ile kodowania aby zmusić WordPress do tak banalnej rzeczy!

    A nie prościej w opcjach menu stworzyć własny (custom) link i dać mu pusty URL, a pod nim dodać podstrony?

    1. O raju! Ile kodowania aby zmusić WordPress do tak banalnej rzeczy!

      No racja, WP nie jest doskonały pod każdym względem.

      A nie prościej w opcjach menu stworzyć własny (custom) link i dać mu pusty URL, a pod nim dodać podstrony?

      Jasne, że prościej 🙂 Jednak kij ma dwa końce:
      1. Link nadal pozostaje klikalny (jest tylko atrapą), a pozostawianie na stronie odnośników prowadzących donikąd nie jest dobrą praktyką.
      2. Zależy kto jest odbiorcą strony. Generalnie im bardziej strona jest przystosowana do przeciątnego użytkownika, tym lepiej. Każde dokadanie dodatkowych wskazówek dla usera końcowego, które są niestandardowe to proszenie się o kłopoty. Idealnie jest gdy obsługa strony sprowadza się do standardowych działań.
      3. Czasami może zajść potrzeba ograniczenia użytkownikowi roli i uprawnień, przez co dostęp do zarządzania menu będzie dla niego niewidoczny, natomiast możliwość dodawania stron do menu chciałoby się zostawić.

      Dzięki za kometarz.

    1. Dzięki za wpis i link. WP pozwala już na zrobienie tego samodzielnie z wykorzystaniem pola „Własne odnośniki” na ekranie edycji menu, więc jak kto woli.

    1. Nie wiem, czy problem jest jest jeszcze aktualny.

      Odpowiem skrótowo, ale jak trzeba będzie, to rozwinę temat. Daj znać, co jest niejasne. Generalnie idea jest ta sama jak opisana wyżej. To znaczy trzeba posłużyć się własnym walkeremi odwołaniem do pola description ($item->description). Wcześniej trzeba nazwę pliku z obrazkiem odpowiadającemu danej pozycji w menu wpisać na poziomie panelu admina właśnie w pole „description” (znajdziesz je w pracy z ekranem menu dla każdej pozycji przeciągniętej do menu).

  17. Witaj Aga. Czy istnieje możliwość aby wpisy były umieszczane na dwóch niezależnych stronach. Motyw który wybrałam nie posiada menu rozwijalnego, a ja bym chciała stworzyć odrębne wpisy dla dla tematów wierszy i wspomnień. Próbowałam stworzyć własne menu aby odpowiednio dodawać wpisy do tych tematów, ale coś mi to nie wychodzi. Czy jeżeli bym chciała aby w menu na górze strony znajdowały się dwie zakładki z odrębnymi wpisami muszę dokonać edycji w szablonie, a jeżeli tak to proszę o Twoje wsparcie jak mam tego dokonać. Wybrany przeze mnie szablon nosi nazwę Aesthete 1.1.4
    Pozdrawiam

    1. Bożena, nie wiem, czy o to chodziło, ale może wystarczy założyć dwie kategorie: 1. wiersze i 2. wspomnienia, a potem wpisy przypisywać odpowiednio do jednej lub do drugiej kategorii?

  18. Witam,

    ja od dłuższego czasu poszukuje rozwiązania dla custom menu, które umożliwi mi wyświetlenie czegoś takiego:

    home
    test1 (strona)
    -test1.1 (strona)
    -test1.2 (kategoria)
    -test1.3 (galeria)
    test2
    test3
    -test3.1 (strona)
    -test3.2 (strona)
    -test3.3 (kategoria)

    w header: home | test1 | test2 | test3

    w sidebar (dla aktywnego np. test1:

    >test1.1 (strona)
    >test1.2 (kategoria)
    >test1.3 (galeria)

    a dla aktywnego test3:

    >test3.1 (strona)
    >test3.2 (strona)
    >test3.3 (kategoria)

    Strony są dodawane w stronach i zachowana jest hierarchiczność (zastosowana wtyczka Gecka Submenu). Jak zastosuję wp_list_pages(), to nie wyświetla mi kategorii :|?

    Czy jest na to jakiś sposób, by przy pomocy wp_nav_menu(array(‚menu’=>’Main Menu’,)); wyświetlić tylko dzieci danego rodzica?

    Pozdrawiam

    1. Żeby wyświetlić dzieci danego rodzica, można się pobawić parametrami funkcji get_pages np:

      //pobierz wszystkie podstrony bloga, ale bez podstron (parent=0)
      $pages = get_pages(&quot;parent=0&amp;sort_column=menu_order&quot;); 
      //Dla każdej strony poziomu 1 
      foreach ($pages as $pagg) {
      	//Pobierz podstrony danej strony (2 poziomu)
      	$pagekids = get_pages(&quot;child_of=&quot;.$pagg-&gt;ID.&quot;&amp;sort_column=menu_order&amp;parent=&quot;.$pagg-&gt;ID.&quot;&amp;hierarchical=0&quot;);
      

      ale to wymaga własnego oprogramowania menu. Nie wiem, czy to co chcesz zrobić, da się jakoś elastycznie uzyskać za pomocą wp_nav_menu. Jak coś mi przyjdzie do głowy, to tu dopiszę.

  19. Witam, a ja mam następujące pytanie. Co trzeba zmienić w tej klasie Walker_Nav_Menu, żeby podzielić zawartość menu rozwijanego na kolumny? I drugie pytanie chciałbym na wysokości całego rozwinięcia dodać zdjęcie i wyrównać je do prawej, jak osiągnąć taki efekt?

    1. Jeśli chodzi o pytanie 1.
      Ja bym podeszła do tego następująco: spróbowała najpierw osiągnąć dany efekt w samym HTML/CSSie (jako przykład może posłużyć ta strona: http://www.huffingtonpost.com/, zakładka Culture), a potem dostosować klasę Walker_Nav_Menu do wygenerowania takiego kodu.

      Jeśli chodzi o pytanie 2. To nie rozumiem za bardzo o jaki efekt chodzi. Czy możesz podesłać jakąś stronę, gdzie jej podobny efekt?

        1. Dziękuję za link. Już teraz wiem, o co chodzi.
          1. Trzeba mieć możliwość skojarzenia obrazków z każdą pozycją menu, z która chcemy go skojarzyć.
          2. Można w tym celu wykorzystać pole Opis, tak jak opisałam Magdzie w odpowiedzi wcześniej.

          Jeśli coś dalej będzie niejasne, pytaj śmiało.

  20. Za dużo komentarzy, ale czy wiesz, że to można zrobić bez żadnych modyfikacji jakiegokolwiek pliku? Wystarczy dodać element do własnego menu z #, a potem jak już zostanie dodany to usunąć # i zapisać. Element przestanie być klikalny 🙂

      1. Czesc. Dopiero ucze się wordpress’a, budujac na nim swoje portfolio fotograficzne. Uzywam themu Expositio i niestety nie moge utworzyc menu z nieklikalnym rodzicem. Nawet po wpisaniu # w pole url moge klikac link i wyswietla mi info o page 404 – jakies pomysly?

  21. Witam
    Zastanawiałem się czy można zrobić Waszą metodą, nieklikalną wybiórczą pozycję z menu ?
    Powiedzmy mam strona główna| strona 1| strona 2 i chciałbym aby:
    strona główna i strona 2 była nieklikalna a strona 1 klikalna.

  22. witam, mam blog na wordpress. Nie rozumiem dlaczego w kategoriach ktore tworze nia da sie umiescic zadnego wpisu, nie da sie ich kliknąć. Jak na zachwalanie super wordpreesa to chyba nie przystanę tragiczny program. Proszę o pomoc.

    1. PrAli masz całkowitą rację. Dowiedziałam się o tym sposobie od jednego z komentujących wyżej. W wolnej chwili zaktualizuję ten wpis, żeby było czarno na białym, ale nie chcę go całkiem usuwać, bo temat Walkera też jest ciekawy i przydał mi się w różnych innych przypadkach. Dzięki za wpisanie się.

  23. Eh. A ja się tyle naszukałam w zeszłym tygodniu. A rozwiązanie mojego problemu jest u Ciebie. Chyba zadawałam złe pytanie do google, bo mi Twojego bloga nie wypluł 😛

    Ratujesz mi życie 🙂

  24. Super – w końcu ktoś po polsku pisze o ‚walkerze’. Odnośnie tego problemu to pamiętam jak powstawiałem href=”#” w linki do nadrzędnych guzików w menu – klientowi to wystarczyło.

    A odnośnie tutoriala to rozszerzył bym go o generowanie menu w stopce ‚klikalnego dla rodziców’ tylko dla wartości depth=’0′ oraz menu katntekstowego przekazujacego id rodzica i wyswietlającego jego dzieci.

    Jeśli te 3 obiekty są oparte o jedno menu to wszystkie sa ze sobą skomunikowane i się bardzo ładnie podkreślają.

    Przykład jest na tym wdrożeniu: http://psipolska.pl/
    Zagalopowałem się tam tak daleko, że nawet te zajawki na indexsie to tez menu.

    Jak chcesz to mogę wysłać kod do tych walkerów.

    Pozdrawiam
    Grzesiek

    1. Dzięki za komentarz. A wiesz, że nie trzeba praktycznie nic robić, żeby mieć rodzica klikanego? Tego się dowiedziałam z komentarzy, a gdybym wiedziała to wcześniej, artykuł by nie powstał.

      I nie jestem jedyną osobą, która pisze o walkerze po polsku. Ola (ta co siedziała obok mnie na WordUpie) też pisała – link w pingbackach.

      Menu w stopce to dobra rzecz, dzięki za przykład. Jak będę potrzebować coś więcej, to się zgłoszę 🙂

      P.S. Nie sądziłam, że Twój blog jest po angielsku. Podziwiam Cię!

  25. Hmm u mnie zadziałało w ten sposób, że wszystkie elementy pierwszego stopnia są niaktywne, a nie tylko te, które mają „dzieci”

    1. Marcin, ja muszę w końcu w treści artykułu dopisać prosty sposób na to jak osiągnąć ten efekt. Ludzie podali go w komentarzach. Ciągle nie mam kiedy albo zapominam…

  26. Mam bardzo prosty sposób (dla leniwych;) )
    Można też tak zrobić, że jako rodzica w menu
    wstawić pusty link i dorzucić strony jako „dzieci”
    do tego linku.

    Strona 1
    Link (pole z odnośnikiem puste)
    – Strona 1.1
    – Strona 1.2
    Strona 2
    Strona 3
    itd.

    1. Masz rację, już chyba 3 osoby wcześniej napisały to w komentarzach. Muszę w końcu napisać to na wstępie artykułu. Jak pisałam ten artykuł nie wiedziałam o tym.

      1. 1. W boksie „Własne odnośniki” dajesz w polu Adres URL np. #, w polu etykieta to co chcesz.
        2. Klikasz „Dodaj do menu”
        3. Usuwasz #
        4. Zapisujesz

          1. Właśnie wstawiłam to na początek artykułu. Twój komentarz mnie do tego zmotywował. Dzięki!

  27. wydaje mi się, że to drugie/prostrze rozwiązanie jest połowiczne (przynajmniej dla mnie).
    Zatrzymała mnie przy dodaniu wtyczki qTranslate, gdyż nie widzę możliwości aby dodane wcześniej (nieklikalni rodzice) odnośniki były tłumaczone przy pomocy tejże wtyczki. Może wy macie jakieś sugestie? Zachowując oczywiście nieklikalnych 😉

    1. Łukasz, wtyczkę qTranslate nie jest dobrą wtyczką. Wypróbuj darmową polylang. Lub oczywiście superaśną wtyczkę WPML, która jest płatna.

      1. Dzięki Aga, właśnie testuję wpml, ale utknąłem bo dodaje podwójne /en/en/ przy tłumaczeniu kategorii 🙁

        1. Łukasz, nie jestem w stanie Ci pomóc w szczegółach, ale na pewno WMPL sobie radzi dobrze z kategoriami. To jest super profesjonalna wtyczka. Jak nie dasz rady, to uderz do ich supportu, ani chętnie pomagają.

    2. zwyczajnie w etykiecie przycisku wprowadzasz dla każdego języka kodzikiem np. dla angielskiego angielski itd

  28. Dzięki. Będę próbował z tym działać bo ma to znaczenie w przypadku korzystania ze stron na tabletach. Np Ipad nie ma czegoś takiego jak podwójne kliknięcie i często nie można się dostać do kolejnych stron. Szczególnie jak jest sytuacja gdzie menu rozwija się do 3 poziomów.

  29. Wszystko ładnie pięknie ale mi to menu nie działa na IE i nie wiem jak temu zaradzić… Ktoś miał taki problem?

  30. witam
    mam pytanie, a mianowicie menu obrazkowe wyświetla mi sie pionowo a nie poziomo w jednej linii. A zrobiłem wszystko tak ja powinno byc.
    Pozdrawiam

    1. Krzysiek, nie wiem, czy to pytanie ma związek z tym artykułem. Napisałam jak prosto wyłączyć „klikalność” rodzica na szarym tle w górnej części artykułu.

  31. Witam. Mam pewien problem ze stroną z którym głowię się już spory czas. Nie dotyczy on tematu wyżej wymienionego lecz widzę, że Pani Aga jest „obcykana” w temacie. mianowicie szablon to tagged. problem tkwi w tym że mam tylko jeden post i chciałbym z niego usunąć datę kiedy został napisany oraz kategorię do jakiej przynależy. Czy mógłbym prosić szanowną Panią Agę o kontakt mailowy aby pomóc mi w tej sprawie?? Byłbym zobowiązany.

    Pozdrawiam Sławek

  32. Witam, zrobiłem nieklikalnych rodziców szybkim sposobem i albo to albo aktualizacja wordpressa do najnowszej wersji spowodowało u mnie usunięcie z panelu admina możliwości edycji menu. Po prostu w tej zakładce jest tam pusto! Nie mogę dodać nowych stron do struktury menu. Z menu WP mogę jedynie stworzyć nowe menu. Co się stało i jak temu zaradzić?

    Tu jest podgląd:
    http://www.sendspace.pl/file/pic/ca5e10e6328a11df933377e

  33. Ja mam może dość nietypowy problem. Od pewnego czasu menu nie pozwala mi dodawać podstron niższego rzędu. Po dodaniu strony jako element niższego rzędu, po zapisaniu zmian, ta strona „przeskakuje” i pojawia się jako element główny Menu czyli głównego rzędu. Proszę o pomoc.

  34. Cześć Aga, bardzo pomocy wpis. Chcę nauczyć się dodawać data-toggle do menu w drzewie HTML. Mam nadzieję, że zajarzę!

    Mam jeszcze jedną uwagę, spostrzeżenie. Na początku artykułu, w szarej ramce dodałaś informacje „Uwaga!
    Po opublikowaniu tego artykułu z komentarzy dowiedziałam się, jak to zrobić szybko i prosto”. Niestety to rozwiązanie „szybko i prosto” nie działa na iPadach. Safari na iPadach nie widzi wtedy „dzieci” i nie uruchamia się/nie rozwija się. Piszę o tym, bo miałam kiedyś z tym trochę zamieszania przy jednej stronie 🙂

  35. $(document).ready(function() {
    $(„.menu-item-has-children a”).addClass(„nolink”);
    $(„.menu-item-has-children .sub-menu a”).removeClass(„nolink”);
    $(„.menu-item-has-children a.nolink”).removeAttr(„href”);
    });

  36. Bardzo przydała mi się ta skrócona informacja (w ramce)jak to zrobić….od kilku dni szukałam jakiegoś sposobu, żeby na stronie, którą dopiero tworzę uzyskać taki efekt. Świetnie.

  37. Takie proste do zrobienia, a takie trudne do znalezienia w Google. Ciężko było mi wyszukać czegoś konkretnego w Google, dobrze że trafiłem do Was (nie wiedziałem co wpisać w wyszukiwarce żeby to znaleźć). Dzięki 🙂

  38. Witaj, mam mały problem, wszystko jest ok lecz zależy mi na nieklikalności wybranych elementów jak to ma miejsce na stronie http://www.optimumokna.pl/ bardzo pilnie potrzebuję podpowiedzi jak w wybranych przeze mnie elementach wyłączyć klikalność. Proszę Cię o pomoc.

  39. witam

    Ja mam inny problem z nextgen-gallery prosiłbym o pomoc

    Już odinstalowałem i instalowałem ponownie i nic nie dało
    Poprostu znikneła mi ikonka w panelu admina do zarządzania galerią wszystkie inne wtyczki są okej a ta jedna znikneła?

  40. Witaj Aga,
    masz może pomysł jak usunąć podlinkowane „Obrazek Produktu” do produktów w sklepie. Na stronie edycji samego Produktu jest możliwość tylko dodania/zmiany obrazka i automatycznie jest podlinkowany. W edycji obrazka od strony Mediów nie mam możliwości skasowania URL ponieważ jest nieedytowalny i jakiś URL musi ten obrazek jednak posiadać.
    http://www.office365online.pl/produkt/office-365-business-premium/
    Pod tym linkiem jest produkt, który chciałabym, żeby pierwszy od góry obrazek na lewo od tytułu był nie klikalny.
    Serdecznie Pozdrawiam,
    Wspaniałego Nowego Roku 😉

      1. Witam.
        A co jeśli próbowałem i namieszałem…. 🙁 próbowałem to zrobić tak jak wyżej ale moje menu chm… rozsypało się. Mimo że mam strony rodzic to podstrony są na tym samym poziomie co strony „rodzic” nie potrafię tego wytłumaczyć , najlepiej zobaczcie sami http://www.budex-pila.com.pl Menu w orginale wyglądało tak : O Nas, Kontakt, Oferta , Wykonane prace. A teraz ….masakra

  41. Super, że zamieściłaś uproszczoną wersję nieklikalnego menu (z oszukanym odnośnikiem)… dla laików, którzy chcą sobie zrobić szybką stronkę idealne rozwiązanie 🙂

    1. Dokładnie to samo chciałem napisać, podziękowania dla Agi i komentującego obeznanego z łatwym obchodzeniem ograniczeń WordPressa.

  42. Mam tylko ten problem z tą metodą, że nieklikalni są również rodzice bez dzieci (samodzielna pozycja w menu bez submenu). Chyba najlepsze rozwiązanie to gdy nieklikalni są tylko ci rodzice, pod którymi jest submenu.

  43. Wszystko działa świetnie ale są dwa błędy (jeden ważny, drugi to bardziej feature):

    1. w tekście do skopiowania jest:
    $indent = ( $depth ) ? str_repeat( „t”, $depth )

    a powinno być (zgodnie ze screenshot i logiką)
    $indent = ( $depth ) ? str_repeat( „\t”, $depth )

    2. Gdy część menu ma submenu a część nie to pojawia się problem, bo wszystkie menu najwyższego poziomu stają się nieklikalne, a powinny tylko te, które mają dzieci. Moja modyfikacja, która to rozwiązała:

    if ($depth != 0)
    na
    if ($depth != 0 || !$args->walker->has_children)

    pozdrawiam i przepraszam jeśli ktoś już o tym napisał w komentarzach, ale jest ich dosyć dużo i mogłem nie ogarnąć

  44. Po zastosowaniu „skróconej” wersji (na Twenty eleven) kliknięcie na „rodzica” otwiera pustą stronę…
    może to zasługa wtyczki Mega Menu?

  45. Dzięki wielkie nieklikalny rodzic tego mi trzeba było.
    Zmodyfikowałem tą wersje i zamiast zostawiać puste miejsce WSTAWCIE ZNACZEK # jako LINK RODZICA. Wtedy po najechaniu kursor zamieni się na łapkę nawigacyjną.

  46. Ten artykuł i cała dyskusja przypomina mi tę znaną historię: Kiedyś NASA wydała milion dolarów ma opracowanie długopisu, który będzie pisał w warunkach nieważkości. A ruskie dali swoim kosmonautom ołówki. No więc poniżej podaję wam „ruski” sposób na nieklikalnego rodzica:
    Wejdź w Wygląd->Menu
    1) W obszarze Własne odnośniki w polu Adres URL wpisz (tymczasowo) cokolwiek, 2) w polu Etykieta wpisz tytuł rodzica.
    3) Kliknij Dodaj do menu.
    4) Wykasuj zawartość pola Adres URL.
    Zapisz menu

    1. he, he, dobre podsumowanie 🙂
      Tak jak wspomniałam, stary sposób zostawiłam, bo dla ludzi bardziej zaawansowanych wiedza jak używać class My_Walker extends Walker_Nav_Menu jest mega przydatna do innych zastosowań.

  47. Jak zrobić aby nieklikany rodzic się rozwijał w dół- na telefonie ponieważ zrobiłem całe menu jest wszystko fajnie ale jak klikam w rodzica żeby się rozwinął to automatycznie działa jak zwykłe odświeżenie.. czy da rade jakos temu zaradzić – nie bawiłem się w plikach i wszytsko jest ok ale nei jest responsywne

    1. Najprościej chyba będzie ci zobaczyć jak to zrobili w którymś z domyślnych motywów WordPressa: Twenty Sixteen lub Twenty Fifteen. Możesz nawet skopiować kod, bo one są na licencji GPL.

  48. Cześć, dzięki za niezwykle pomocne wpisy!

    Chciałabym prosić o pomoc w rozwiązaniu irytującego problemu z menu, dla którego nigdzie w przepastnej otchłani Internetu nie mogę znaleźć żadnych wskazówek.
    Dotychczas używałam motywu Mantra, ale chcąc unowocześnić nieco wygląd bloga, przerzuciłam się na zachwalany Enlightenment, i moje menu szlag trafił.
    Po pierwsze, pomimo tego że w Wygląd>Menu wszystko jest jak należy, na stronie, gdy kliknę w menu, w elementach submenu powtarza się element menu… W Mantrze tak się nie działo i nie mam pojęcia jak temu zaradzić.
    Po drugie, po zmianie motywu moje dotychczas doskonałe menu nagle przestało się rozwijać od trzymania kursora ponad elementem, trzeba za każdym razem klikać.

    Mili wordpressoznawcy, czy ktoś byłby w stanie mi coś doradzić, aby to rozwikłać?

    1. Hej Kinga. Czy to jest ten motyw?
      https://pl.wordpress.org/themes/enlightenment/

      Skąd pobrałaś ten motyw? Patrząc na źródło Twojej strony to używasz właśnie tej wersji (1.1.4). Jak widzisz, to jest bardzo stara wersja i będziesz mieć z nią tylko problemy. Ja ją właśnie zainstalowałam i mi w ogóle nie działa menu rozwijane.

      Czym się kierowałaś wybierając ten motyw? Może spróbujemy znaleźć inny, który ma te rzeczy, których potrzebujesz.

      1. Hej, dzięki za odpowiedź! Dopiero teraz ją zauważyłam. Zapisałam się na informowanie o nowych komentarzach, ale dopiero dzisiaj otrzymałam kilka maili naraz, wcześniej nic.
        Tak, to ten motyw i cóż, zainstalowałam go po tym jak poczytałam o jego funkcjonalności, ale na datę nie zwróciłam uwagi. Po instalacji spędziłam mnóstwo czasu na dostosowywanie strony, m.in. widgetem custom query. Czy istnieje taki inny motyw, który po instalacji nie zniszczyłby mi tej pracy, a nie zniszczyłby tej pracy, a jedynie uzupełnił braki?

          1. Wszystkie elementy ze strony głównej. Chciałabym znaleźć taki motyw, który zachowałby te wszystkie ustawienia, nad którymi pracowałam w aktualnym motywie, ale który by mi nie sprawiał żadnych problemów związanych z przedawnieniem aktualizacji. Może mogłabyś mi polecić jakieś rozwiązanie? Byłabym bardzo wdzięczna.

  49. Cześć,
    Gugluję i gugluję i spróbuję tutaj spytać. 🙂
    Mam problem z menu.
    Wszystkie menu na stronie działają za wyjątkiem jednego przypadku. Gdy użytkownik klika w menu strony na której już się znajduje, to do linku dokładana jest jego nazwa użytkownika i ląduje na stronie 404.
    Problem niedawno odkryty, zgłaszany przez kilku użytkowników, ale konia z rzędem temu, kto powie czym to jest spowodowane.
    Proszę o pomoc w miarę możliwości.
    Oczywiście mogę udostępnić więcej danych.
    Pozdrawiam

    1. Wyłącz na moment wszystkie wtyczki i zobacz czy problem się powtarza. Jeśli nie, to włączaj po jednej, żeby znaleźć winowajcę. Jeśli to nie wtyczki, to przełącz motyw na inny i też sprawdź. Będziesz bliżej celu.

        1. Jak nie chcesz tego robić na żywej stronie, to zrób kopię wtyczką Duplicator. To świetna inwestycja (w sensie nauki, bo wtyczka jest darmowa) i w ten sposób będziesz mógł rozwiązywać w bezpieczny sposób inne problemy.

          1. Ooo tego nie znałem. Spróbuję, dzięki.
            Bo właśnie wyłączyłem wszystkie wtyczki na żywej stronie i się totalnie wysypała.
            Pozdrawiam 🙂

  50. Witaj Agnieszko

    Jestem słabo zaawansowany w tym temacie, ale coś niecoś wiem na tyle, że zmieniam stronę mojej żony. Nie znam się na kodach i nie mam do nich dostępu, bo hosting prowadzi firma zewnętrzna.
    Ostatnio udało mi się stworzyć wielopoziomowe menu, bardzo złożone. Do każdego elementu podmenu będą wprowadzone zdjęcia, ale na ten moment jest tylko szkielet menu, z podpiętymi tytułami podstron. Szkielet na ten moment wygląda tak:
    Rodzic nieklikalny
    Dziecko nr 1 z adresem URL
    Dziecko nr 2 nie ma URL ani miejsca na ten adres, przy czym to dziecko ma swoje podmenu z czterema elementami, które dzielą się na kolejne elementy.
    Problemem jest brak miejsca na adresy URL u Dziecka nr 2 i wszystkich elementów kolejnych podmenu.
    Dodam że na tej stronie jest drugi element menu z nieklikalnym rodzicem, do którego podłączone są trzy elementy, w których są miejsca na adresy URL, zatem nie jest to chyba problem braku jakiejś wtyczki.
    Jeśli masz jakąś radę będę bardzo wdzięczny
    Pozdrawiam

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Wyrażam zgodę na przetwarzanie przez Webfaces Agnieszka Bury, ul. Rymarska 42/3, 53-206 Wrocław NIP: 9111769381, REGON: 021997379, moich danych osobowych w celu dodania komentarza na blogu webfaces.pl. (Sorry, takie są wymogi RODO, więcej informacji w Polityce prywatności).