Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wordpress/woocommerce - wyświetlanie podkategorii sklepu
Abumbaraj
post 23.04.2018, 15:16:36
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.04.2018

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Lukeup
post 23.04.2018, 21:05:04
Post #2





Grupa: Zarejestrowani
Postów: 20
Pomógł: 5
Dołączył: 13.04.2018

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Abumbaraj
post 23.04.2018, 21:19:52
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.04.2018

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Lukeup
post 24.04.2018, 20:47:35
Post #4





Grupa: Zarejestrowani
Postów: 20
Pomógł: 5
Dołączył: 13.04.2018

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
trueblue
post 24.04.2018, 21:54:53
Post #5





Grupa: Zarejestrowani
Postów: 5 055
Pomógł: 1410
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Abumbaraj
post 25.04.2018, 10:03:09
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.04.2018

Ostrzeżenie: (0%)
-----


Dzięki panowie za porady, chyba będę musiał to zlecić komuś bo sam tego nie ogarnę :-)
Go to the top of the page
+Quote Post
trueblue
post 25.04.2018, 10:09:18
Post #7





Grupa: Zarejestrowani
Postów: 5 055
Pomógł: 1410
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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

  1. $categories = get_term_children( 0, 'product_cat' );
Go to the top of the page
+Quote Post
Abumbaraj
post 8.05.2018, 22:34:27
Post #8





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.04.2018

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
LowiczakPL
post 9.05.2018, 22:30:40
Post #9





Grupa: Zarejestrowani
Postów: 313
Pomógł: 21
Dołączył: 3.01.2016
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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. }


--------------------
Poszukuję zleceń najlepiej w Symfony, Laravel, ... PHP, MySQL, Back-End, Front-End, mogę pomóc też z Unity
Go to the top of the page
+Quote Post
Abumbaraj
post 13.06.2018, 15:51:27
Post #10





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.04.2018

Ostrzeżenie: (0%)
-----


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

Ten post edytował Abumbaraj 14.05.2018, 18:21:21
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 21.06.2018 - 19:14