Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wordpress/woocommerce - wyświetlanie podkategorii sklepu
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy portalowe i CMS'y
Abumbaraj
Witajcie,

Nie za bardzo potrafię programować w PHP, generalnie wszystko co robię to edycja gotowych elementów z formów/ sieci etc.

Mam taki skrypcik, który po wybraniu kategorii w sklepie na sidebarze odpala jego podkategorie.
Wszystko działa praktycznie idealnie poza jednym mankamentem. Po wejściu w podkategorię nie wyświetla już nic - a w tym miejscu chciałbym wyświetlać dalej te same podkategorie w obrębie kategorii rodzica.

np. wygląda to tak

wchodzę w [kategoria 1]

w sidebarze wyświetla mi się:
[kategoria 1]
- [podkategoria 1]
- [podkategoria 2]
- [podkategoria 3]

po wejściu w którąś z podkategorii chciałbym aby wyświetlało mi się

[kategoria 1]
- [podkategoria 1]
- [podkategoria 2]
- [podkategoria 3]

tak aby użytkownik miał pod ręką pozostałe podkategorie.

a teraz najważniejszy element układanki, czyli to co już mam:

  1. <?php
  2.  
  3. single_cat_title('', false);
  4. echo '<b>';
  5. echo single_cat_title('', false);
  6. echo '</b>';
  7.  
  8. echo '<div class="fusion-separator fusion-full-width-sep sep-double sep-solid" style="border-color:#e0dede;border-top-width:1px;border-bottom-width:1px;margin-left: auto;margin-right: auto;margin-top:10px;margin-bottom:10px;"></div>';
  9.  
  10.  
  11.  
  12. $queried_object = get_queried_object();
  13. $parent = $queried_object->term_id;
  14. $categories = get_term_children( $parent, 'product_cat' );
  15. if ( $categories && ! is_wp_error( $category ) ) :
  16. echo '<p class="subcattitle">PODKATEGORIE:</p>';
  17. echo '<ul>';
  18.  
  19. foreach($categories as $category) :
  20.  
  21. $term = get_term( $category, 'product_cat' );
  22. echo '<li class="subcatmenu">';
  23. echo '<span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span>';
  24. echo '<a href="'.get_term_link($term).'">';
  25. echo $term->name;
  26. echo '</a></span>';
  27. echo '</li>';
  28.  
  29. endforeach;
  30.  
  31. echo '</ul>';
  32.  
  33. echo '<div class="fusion-separator fusion-full-width-sep sep-double sep-solid" style="border-color:#e0dede;border-top-width:1px;border-bottom-width:1px;margin-left: auto;margin-right: auto;margin-top:10px;margin-bottom:10px;"></div>';
  34.  
  35. endif;
  36.  
  37. ?>


Jest tu jakaś dobra dusza, która pomoże mi rozwiązać problem? ohno-smiley.gif
Lukeup
W pasku adresu powinieneś mieć przyjazny link wordpresowy bądź jakiś inny uwzględniający id. Robisz sobie menu przez foreach i <li> więc dla wystąpienia, które pokrywa się z danymi wcześniej uzyskanymi, wyBOLDuj go. W dobrym tonie jest to robić prze z CSS (font-weight: bold;), ale w zależności od potrzeb, stosuje się w html, zwykły znacznik <b></b>. W wordpress możesz też mieć gotowy odpowiedni shortcode.
Abumbaraj
Tu nie chodziło o to boldowanie ;-)

chodziło o to, ze po wejściu w podkategorie skrypt nie wypluwa nic, a chciałbym żeby wydrukował mi to samo co w widoku kategorii, tj tą samą nawigację co na poziomie rodzica.
Lukeup
Czy masz może ten projekt na GIT-cie, by sobie sklonować i sprawdzić? Dobrze, by była również baza danych. Póki co, za mało informacji, by coś więcej powiedzieć/doradzić, przynajmniej dla mnie.
trueblue
W linii 14 pobierane jest drzewo kategorii dla wybranego (aktualnego) obiektu.
Musisz zawsze dostarczać $parent o wartości obiektu najwyższego w hierarchii. Być może jest to 0.
Abumbaraj
Dzięki panowie za porady, chyba będę musiał to zlecić komuś bo sam tego nie ogarnę :-)
trueblue
A próbowałeś tak jak pisałem?

  1. $categories = get_term_children( 0, 'product_cat' );
Abumbaraj
Tak, próbowałem, ale to nie działa...


Znalazłem nowy skrypt.


  1. <?php
  2. $term = get_queried_object()->term_id;
  3. $termid = get_term($term, 'product_cat' );
  4. if($termid->parent > 0)
  5. {
  6. $args = array(
  7. 'orderby' => 'name',
  8. 'order' => 'ASC',
  9. 'hide_empty' => false,
  10. 'child_of' => $termid->parent,
  11. );
  12. $siblingproducts = get_terms( 'product_cat', $args);
  13. foreach ($siblingproducts as $siblingproduct) {
  14.  
  15. if ($siblingproduct->term_id == $term ) {
  16. echo '<li class="subcatmenu"><span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span>';
  17. }
  18.  
  19. else {
  20. echo '<li class="subcatmenu"><span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span>';
  21. }
  22.  
  23. echo '<a href="';
  24. echo get_term_link( $siblingproduct );
  25. echo '">';
  26. echo $siblingproduct->name;
  27. echo '</a></span></li>';
  28. }
  29. }
  30.  
  31. else {
  32. $args = array(
  33. 'orderby' => 'name',
  34. 'order' => 'ASC',
  35. 'hide_empty' => false,
  36. 'parent' => $term
  37. );
  38. $subproducts = get_terms( 'product_cat', $args);
  39. foreach ($subproducts as $subproduct) {
  40. echo '<li class="subcatmenu"><span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span><a href="'.get_term_link( $subproduct ).'">';
  41. echo $subproduct->name;
  42. echo '</a></span></li>';
  43. }
  44. }
  45. ?>




Ten już jest na prawdę bliski temu co chciałbym osiągnąć.
Jedyne co mu "dolega" to to co pokazuje na poniższym przykładzie.


np. struktura menu wygląda mniej wiecej tak


1. Rodzic
1.1 Dziecko
1.2 Dziecko
1.3 Dziecko
1.3.1 Wnuk
1.3.2 Wnuk
2. Rodzic
2.1 Dziecko
2.2 Dziecko
2.3 Dziecko
2.3.1 Wnuk
2.3.2 Wnuk


Działa to na ten moment tak:

Klikam 1. Rodzic - tutaj jest ok
Wyświetla:
1.1 Dziecko
1.2 Dziecko
1.3 Dziecko

Klikam 1.1 Dziecko (Dziecko które nie ma już wnuków)
Wyświetla:
1.1 Dziecko
1.2 Dziecko
1.3 Dziecko
1.3.1 Wnuk - tego nie powinno
1.3.2 Wnuk - tego nie powinno

Klikam 1.3 Dziecko (Dziecko, które ma wnuki)
Wyświetla:
1.1 Dziecko - tego nie powinno
1.2 Dziecko - tego nie powinno
1.3 Dziecko - tego nie powinno
1.3.1 Wnuk
1.3.2 Wnuk

Klikam 1.3.1 Wnuk - i tutaj jest ok
Wyświetla:
1.3.1 Wnuk
1.3.2 Wnuk


hop hop, jest tu kto ? smile.gif
LowiczakPL
To może tak lub coś w tym style, sprawdź po prostu czy dzieci są wyświetlane z klikniętego PARENTa

  1. $subproducts = get_terms( 'product_cat', $args);
  2. foreach ($subproducts as $subproduct) {
  3. if ($subproduct->parent == $term ) {
  4. echo '<li class="subcatmenu"><span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span><a href="'.get_term_link( $subproduct ).'">';
  5. echo $subproduct->name;
  6. echo '</a></span></li>';
  7. }
  8. }


a ten kod HTML pokazuje Ci się w 2 przypadkach dla true i dla false więc warunek jest zbędny

  1. if ($siblingproduct->term_id == $term ) {
  2. echo '<li class="subcatmenu"><span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span>';
  3. }
  4.  
  5. else {
  6. echo '<li class="subcatmenu"><span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span>';
  7. }
Abumbaraj
ja totalnie improwizuje z php, niestety to się nie udało...

a to nie powinno być tak, że:

jeśli dziecko ma wnuki -> wyświetl tylko wnuki tego dziecka z pominięciem wnuków innych dzieci
jeśli dziecko nie ma wnuków -> wyświetl tylko rodzeństwo tego dziecka (bez rodziców)

Klikam 1.1 Dziecko (Dziecko które nie ma już wnuków)
Wyświetla:
1.1 Dziecko
1.2 Dziecko
1.3 Dziecko
1.3.1 Wnuk - tego nie powinno
1.3.2 Wnuk - tego nie powinno

Klikam 1.3 Dziecko (Dziecko, które ma wnuki)
Wyświetla:
1.1 Dziecko - tego nie powinno
1.2 Dziecko - tego nie powinno
1.3 Dziecko - tego nie powinno
1.3.1 Wnuk
1.3.2 Wnuk

https://pasteboard.co/HlatZfm.png
tak to wygląda teraz

,

Kto ma ochotę podjąć się zadania i na ile wycenia swoją pracęquestionmark.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2018 Invision Power Services, Inc.