Buduję horyzontalne menu, a niektóre wpisy w tym menu będą miały rozwijane menu (podmenu), a niektóre nie. Te, które mają podmenu, w rzeczywistości nie są stronami. Mają być jedynie przewodnikami po rozwijanych listach.
Załóżmy na przykład, że menu horyzontalne wygląda następująco:
Strona główna | O nas | Produkty | Kierunki | Kontakt
A element „produkty” ma zawierać 3 strony połączone na pionowej liście rozwijanej poniżej, więc same „produkty” tak naprawdę nie reprezentują strony, jak mogę to zrobić w WP?
(Używam WP jako CMS, ze statycznymi stronami domowymi i wewnętrznymi. Buduję własne szablony, projektuję menu w CSS, a następnie rejestruję menu w functions.php i wywołuję je w szablonach.) W WP dodajesz wpisy do menu za pomocą listy stron lub niestandardowych łączy. Ale nie chcę, aby „produkty” były połączone. Jeśli nie dodam linku do linku niestandardowego, nie pozwoli mi dodać go do menu.
Czy można to zrobić za pomocą menu administratora, czy też muszę podejść do tego w inny sposób?
Dziękuję za wszelką pomoc!
Odpowiedzi:
Mam kilka pomysłów:
#
którego nic nie zwróciźródło
href=""
ponieważ większość użytkowników urządzeń dotykowych nie będzie mogła zobaczyć menu rozwijanego bez użycia JSwp_list_pages()
, niewp_nav_menu()
Najłatwiejszym sposobem na zrobienie tego bez wtyczki lub czegokolwiek jest skorzystanie z funkcji „Menu” WordPressa. Oto instrukcje dla WordPress 4.8:
źródło
Najprostszą metodą, jaką wymyśliłem, było utworzenie niestandardowego elementu linku o wartości adresu URL linku wynoszącego
#
. To wysyła użytkownika do pustego skrótu na tej samej stronie, więc w zasadzie nie ma nigdzie linków.Istnieją jednak pewne skutki uboczne używania pustych skrótów dla łączy zastępczych. Link nadal będzie się pojawiał i będzie zachowywał się jak link, więc może wprowadzić użytkowników w błąd, gdy kliknie coś, co wydaje się linkiem, ale nic się nie dzieje. Innym efektem jest to, że kliknięcie pustego linku skrótu spowoduje zastąpienie istniejącego skrótu, wysyłając użytkownika na górę strony. To i tak może nie być tak niepokojące dla menu, które jest na górze strony, ale jest dość denerwujące, gdy strona niespodziewanie przeskakuje, gdy się jej nie spodziewasz, szczególnie jeśli jest to menu stopki.
Rozwiązaniem jest połączenie metody pustego skrótu z fragmentem kodu w celu wykrycia, kiedy w menu używane są puste łącza skrótu i
href
całkowite usunięcie atrybutu z tego łącza.a
Elementem bezhref
atrybutu jest poprawny HTML 5 metoda tworzenia łącza zastępczy.źródło
To działało dla mnie:
Aktywowałem Klasy CSS w Menu> Opcje ekranu> Klasy CSS Następnie podałem element menu, który chciałem dezaktywować klasę „.nolink” i dodałem ten fragment kodu do mojego niestandardowego panelu CSS:
źródło
#
jako celu linku, a następnie zastosowanie niestandardowej klasy CSS do celów stylizacji, jest moim zdaniem najmniej hackerskim rozwiązaniem. Jednak ustawieniepointer-events: none
nie ma dla mnie większego sensu, ponieważ spowoduje uszkodzenie podmenu. Czy możesz wyjaśnić, dlaczego ustawiłeś ten atrybut?Korzystając z podejścia PHP, dodałem ten kod do functions.php:
Spowoduje to zastąpienie linku elementem span dla menu pozycji post_name == „kontakt”, czego szukałem. Możesz to łatwo zmienić, aby sprawdzić tytuł menu lub identyfikator, lub dodać kod, aby sprawdzić, czy zawiera elementy menu podrzędnego itp.
źródło
Rozwiązałem w ten sposób: w header.php (twojego tematu) szukałem:
i zastąpiony przez:
Krótko mówiąc, ten skrypt sprawdza, czy jego link nadrzędny kończy się na „#”, w tym przypadku dodaje element rozpiętości wokół zawartości znacznika A, który wyłącza kliknięcie.
Mam nadzieję, że to pomoże :-)
źródło
Jak sugerują tu inni, możesz utworzyć niestandardowy element menu z linkiem # jako jego adres URL. Następnie usuń # po dodaniu go do menu. I wreszcie, możesz użyć tego prostego wyrażenia regularnego, aby usunąć rzeczywisty tag z tych łączy.
źródło
Spowoduje to usunięcie kliknięcia (i usunięcie stylu elementu). W ten sposób nie musisz używać niestandardowych # linków w swoim menu.
źródło
Doceń to stary wątek, ale szybki i brudny sposób uzyskania linku w Wordpress polega na utworzeniu adresu URL linku jako:
#_
Zwróć uwagę na podkreślenie po hashtagu. W ten sposób, jeśli twoje menu przewija się w dół strony (tzn. Naprawione), nie dostajesz skoku na górę strony po kliknięciu na nią i nie wymaga żadnych wtyczek / skryptu.
źródło
Zdaję sobie sprawę, że spóźniłem się z grą, ale są to dwie metody, których używam:
1) Ustaw element menu nadrzędnego jako duplikat pierwszego elementu podrzędnego i zmień jego etykietę. Na przykład, jeśli pierwszy element w „Produktach” to „Produkt 1”, użyj „Produkt 1” jako elementu menu nadrzędnego, a następnie zmień jego etykietę na „Produkty”. W ten sposób zarówno „Produkty”, jak i „Produkt 1” doprowadzą do strony Produkt 1.
2) Dodaj przekierowanie, aby strona Produkty została przekierowana do produktu 1. Zaletą tej opcji jest to, że umożliwia utworzenie pustej strony Produkty w celu utworzenia hierarchicznej listy na Stronach, ale jeśli ktoś spróbuje przejść do pustych Produktów strona zostanie przekierowana.
źródło
Przejdź do Wygląd, a następnie kliknij menu. W tej sekcji przejdź do struktury menu i kliknij strzałkę w dół, aby rozwinąć stronę, a zobaczysz pole z komunikatem „Wyłącz link”. Zaznacz to pole i zapisz.
źródło
Dodaj ten filtr:
Edytuj CSS zakresu, aby uzyskać taki sam styl jak
<a>
, nie zapomnijcursor: context-menu;
.źródło
Utwórz element menu „Niestandardowe łącza” i dodaj „javascript :;” (bez cudzysłowów) dla pola adresu URL. Jest to lepszy sposób niż użycie „#”, ponieważ kliknięcie nie spowoduje przewinięcia strony do góry.
źródło
Pisząc od 1/2019, rozwiązaniem, które produkuje prawidłowy HTML5 jest wykonanie następujących czynności.
Spowoduje to utworzenie nawigacji najwyższego poziomu,
<a>Menu</a>
która jest prawidłowym sposobem reprezentowania łącza, którego nie można kliknąć.źródło
Możesz wyłączyć zdarzenia w
<a>
tagu dla wszystkich pozycji menu pierwszego poziomu, używając czystego css..main-menu
klasa może mieć inną nazwę zgodnie z nazwą twojego menu.źródło
Znacznie łatwiejsze rozwiązanie można znaleźć na innym pytaniu:
Menu administracyjne - Podświetl menu najwyższego poziomu na stronie podmenu (bez pokazywania podmenu)
Poszukaj odpowiedzi Askelona. Działa idealnie, bez potrzeby wykonywania żadnych preg_replaces lub jquery.
źródło