Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Systemy portalowe i CMS'y _ Wordpress/woocommerce - wyświetlanie podkategorii sklepu

Napisany przez: Abumbaraj 23.04.2018, 15:16:36

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. http://www.php.net/echo '<b>';
  5. http://www.php.net/echo single_cat_title('', false);
  6. http://www.php.net/echo '</b>';
  7.  
  8. http://www.php.net/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. http://www.php.net/echo '<p class="subcattitle">PODKATEGORIE:</p>';
  17. http://www.php.net/echo '<ul>';
  18.  
  19. foreach($categories as $category) :
  20.  
  21. $term = get_term( $category, 'product_cat' );
  22. http://www.php.net/echo '<li class="subcatmenu">';
  23. http://www.php.net/echo '<span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span>';
  24. http://www.php.net/echo '<a href="'.get_term_link($term).'">';
  25. http://www.php.net/echo $term->name;
  26. http://www.php.net/echo '</a></span>';
  27. http://www.php.net/echo '</li>';
  28.  
  29. endforeach;
  30.  
  31. http://www.php.net/echo '</ul>';
  32.  
  33. http://www.php.net/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

Napisany przez: Lukeup 23.04.2018, 21:05:04

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.

Napisany przez: Abumbaraj 23.04.2018, 21:19:52

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.

Napisany przez: Lukeup 24.04.2018, 20:47:35

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.

Napisany przez: trueblue 24.04.2018, 21:54:53

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.

Napisany przez: Abumbaraj 25.04.2018, 10:03:09

Dzięki panowie za porady, chyba będę musiał to zlecić komuś bo sam tego nie ogarnę :-)

Napisany przez: trueblue 25.04.2018, 10:09:18

A próbowałeś tak jak pisałem?

  1. $categories = get_term_children( 0, 'product_cat' );

Napisany przez: Abumbaraj 8.05.2018, 22:34:27

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 = http://www.php.net/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. http://www.php.net/echo '<li class="subcatmenu"><span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span>';
  17. }
  18.  
  19. else {
  20. http://www.php.net/echo '<li class="subcatmenu"><span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span>';
  21. }
  22.  
  23. http://www.php.net/echo '<a href="';
  24. http://www.php.net/echo get_term_link( $siblingproduct );
  25. http://www.php.net/echo '">';
  26. http://www.php.net/echo $siblingproduct->name;
  27. http://www.php.net/echo '</a></span></li>';
  28. }
  29. }
  30.  
  31. else {
  32. $args = http://www.php.net/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. http://www.php.net/echo '<li class="subcatmenu"><span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span><a href="'.get_term_link( $subproduct ).'">';
  41. http://www.php.net/echo $subproduct->name;
  42. http://www.php.net/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

Napisany przez: LowiczakPL 9.05.2018, 22:30:40

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. http://www.php.net/echo '<li class="subcatmenu"><span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span><a href="'.get_term_link( $subproduct ).'">';
  5. http://www.php.net/echo $subproduct->name;
  6. http://www.php.net/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. http://www.php.net/echo '<li class="subcatmenu"><span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span>';
  3. }
  4.  
  5. else {
  6. http://www.php.net/echo '<li class="subcatmenu"><span class="subcatlinkmenu"><span class="fusion-megamenu-bullet"></span>';
  7. }

Napisany przez: Abumbaraj 13.06.2018, 15:51:27

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)