🢂Menu drugiego poziomu w WordPress ‑ Shortcode
Shortcode do WordPressa, który wyświetla menu z elementami drugiego poziomu, pokazując albo elementy równorzędne, albo podrzędne do aktualnie wybranego elementu w menu.
Shortcode, pokazany poniżej, umożliwia dynamiczne wyświetlanie menu drugiego poziomu w WordPressie, co może być szczególnie przydatne przypadku stron oferujących szeroki zakres tematyczny, może pomóc w lepszej organizacji treści. Umożliwia to grupowanie powiązanych tematycznie stron lub postów, ułatwiając użytkownikom orientację na stronie.
Aby użyć tego shorkodu w WordPressie, najpierw należy go dodać do pliku functions.php w motywie, którego aktualnie używasz.
Po wklejeniu kodu do pliku functions.php
, umieść [show_level2_sibling_or_child_menu]
w treści strony, wpisie blogowym lub widgetach.
Pozwoli to na wyświetlenie elementów menu, które są równorzędne lub podrzędne do aktualnie wybranej pozycji, działając zgodnie z logiką menu drugiego poziomu.
Pamiętaj, żeby sprawdzić, czy nazwa lokalizacji menu ('primary'
) jest zgodna z tą, której faktycznie używasz w swoim motywie. Jeśli używasz innej nazwy lokalizacji niż główne menu (primary), zaktualizuj wartość zmiennej $menu_name
w funkcji, aby odpowiadała Twojej konfiguracji.
function show_sibling_or_child_menu_items_level2()
{
global $wp_query;
$menu_name = 'primary'; // Zmień na lokalizację menu, której używasz
$locations = get_nav_menu_locations();
$menu = wp_get_nav_menu_object($locations[$menu_name]);
$menu_items = wp_get_nav_menu_items($menu->term_id);
$queried_object = get_queried_object();
$current_item_id = 0;
$parent_item_id = 0;
$found_items = [];
// Znajdź bieżący element menu
foreach ($menu_items as $item) {
if (($item->object_id == $queried_object->term_id && $item->type === 'taxonomy') || ($item->object_id == $queried_object->ID && $item->type === 'post_type')) {
$current_item_id = $item->ID;
$parent_item_id = $item->menu_item_parent;
break;
}
}
// Jeśli bieżący element ma rodzica, szukaj rodzeństwa, w przeciwnym razie szukaj dzieci
if ($parent_item_id != 0) {
foreach ($menu_items as $item) {
if ($item->menu_item_parent == $parent_item_id) {
$found_items[] = $item; // Rodzeństwo, włącznie z bieżącym elementem
}
}
} else {
// Szukaj dzieci dla bieżącego elementu, jeśli nie ma rodzica
foreach ($menu_items as $submenu) {
if ($submenu->menu_item_parent == $current_item_id) {
$found_items[] = $submenu;
}
}
}
// Wyświetl znalezione elementy
if (!empty($found_items)) {
$menu_list = '<ul class="submenu id-' . $current_item_id . '">';
$poz = 1;
foreach ($found_items as $item) {
$menu_list .= '<li class="item-' . $poz . '"><a href="' . $item->url . '">' . $item->title . '</a></li>';
$poz++;
}
$menu_list .= '</ul>';
return $menu_list;
} else {
//return 'Brak elementów podrzędnych lub równorzędnych na poziomie 2.';
return null;
}
}
// Dodaj shortcode, aby umożliwić łatwe wyświetlanie menu w treści
add_shortcode('show_level2_sibling_or_child_menu', 'show_sibling_or_child_menu_items_level2_shortcode');
function show_sibling_or_child_menu_items_level2_shortcode() {
return show_sibling_or_child_menu_items_level2();
}
W pokazanym fragmencie kodu, generowane jest menu z elementami, które otrzymują unikalne klasy CSS, co znacząco ułatwia ich stylizację. Każdej liście <ul>
przypisywana jest klasa submenu
wraz z unikalnym identyfikatorem id-
odpowiadającym bieżącemu elementowi menu (np. submenu id-168
), a każdemu elementowi listy <li>
przypisywana jest unikalna klasa item-
wraz z numerem porządkowym, który jest inkrementowany w każdej iteracji pętli (np. item-1
,item-2
itd.).
Styl menu
Aby dostosować wygląd wyświetlanego menu za pomocą CSS, możesz dodać reguły stylów w pliku style.css
swojego motywu. Poniżej znajdziesz przykładowe reguły, które zmienią wygląd listy i linków menu:
/* Stylowanie listy menu */
ul {
list-style-type: none; /* Usuwa domyślne znaczniki listy */
padding: 0; /* Usuwa domyślne wcięcia */
margin: 0; /* Usuwa domyślne marginesy */
}
/* Stylowanie poszczególnych elementów listy */
ul li {
margin: 5px 0; /* Dodaje margines pomiędzy elementami listy */
padding: 5px; /* Dodaje wewnętrzny odstęp dla elementów listy */
}
/* Stylowanie linków w menu */
ul li a {
text-decoration: none; /* Usuwa podkreślenie linków */
color: #333; /* Ustawia kolor tekstu linków */
font-weight: bold; /* Ustawia pogrubienie tekstu */
}
ul li a:hover {
color: #007bff; /* Zmienia kolor linków przy najechaniu */
text-decoration: underline; /* Dodaje podkreślenie przy najechaniu */
}
/* wygląd każdej pozycji menu oraz całego submenu. */
.submenu {
list-style-type: none; /* Usunięcie domyślnych znaczników listy */
padding: 0; /* Usunięcie domyślnego paddingu */
margin: 20px 0; /* Dodanie marginesu wokół submenu */
background-color: #f9f9f9; /* Ustawienie tła submenu */
}
.submenu li {
margin: 5px 0; /* Margines dla każdego elementu */
padding: 10px; /* Padding dla każdego elementu */
}
.submenu li a {
text-decoration: none; /* Usunięcie podkreślenia z linków */
color: #333; /* Kolor tekstu */
display: block; /* Sprawia, że linki zajmują cały dostępny obszar */
}
.submenu li a:hover {
background-color: #e9e9e9; /* Kolor tła przy najechaniu */
}
/* Przykład stylizacji konkretnego elementu */
.item-1 {
font-weight: bold; /* Pierwszy element menu będzie pogrubiony */
}