Wsparcie » Zaawansowane » Więcej w tej kategori

  • Witam serdecznie.
    Bardzo proszę o pomoc, nie jestem w stanie sam tego rozgryźć.
    Mam na swojej stronie dodany post_type „produkty” i kilka podstron na których wyświetlam te produkty zgodnie z ich kategoriami do tego momentu wszystko działa. Teraz klikając w produkt przechodzę do treści z tym produktem i poniżej opisu tego produktu chciałbym wyświetlić coś takiego jak „więcej w tej kategorii. Prawdopodobnie potrzebna mi jakaś pętla do pliku single.php która wyświetli produkty z tej kategorii w której jest aktywny wpis.

    Mam nadzieję że w miarę zrozumiale to opisałem.

Viewing 9 replies - 1 through 9 (of 9 total)
  • Cześć,

    Dość szybko można taki moduł napisać. Kod będzie się znajdował w pliku single.php
    Na początek trzeba sprawdzić post type i pobrać kategorię:

    <?php
    
    if(get_post_type() === 'produkty'){
    
      //Pobierz kategorię ( term )
      $cat = wp_get_post_categories();
    
      $term = '';
      if(isset($cat[0]) //  Pobiera pierwszą kategorię, jeżeli jest ich więcej
      $term = get_term_by('id', $cat[0], 'category');
    
      // Pobierz posty
      $args = array(
        'posts_per_page' => 5,
        'exclude' => array(get_the_id()), // Nie pobieraj produktu, który jest teraz wyświetlany
        'category' => $term );
    
      $products = get_posts( $args );
    
      // Tutaj pęta foreach i HTML...
      ...
    
    }
    
     ?>

    Widzę mały błąd. W tablicy $args ma być $term->term_id, a nie $term.

    Thread Starter Kadai

    (@kadai)

    Dzięki za odpowiedź ale niestety jak wklejam ten kod do single.php to wywala mi błąd „Parse error: syntax error, unexpected '$term’ (T_VARIABLE)” W tablicy zmieniłem też $term na $term->term_id

    Wybacz. Wyjątkowo pisałem kod od razu w komentarzu i nie sprawdzałem go. Widzę, że umknął mi nawias zamykający ifa w if(isset($cat[0]). Powinno być tak: if(isset($cat[0]))

    Gdyby dalej coś było nie tak, to wieczorem przetestuje kod i wkleję w pełni działający. Niemniej jednak myślę, że sobie już poradzisz z tego miejsca.

    Thread Starter Kadai

    (@kadai)

    Nie ma już błędu ale jeszcze chyba jest coś nie tak bo wyświetla mi się tylko jeden post i to ten aktualny na którym jestem. Będę wdzięczny jeśli dasz rade poratować wieczorem w pełni działającym kodem

    Błędnie założyłem, że funkcja wp_get_post_categories() pobiera ID posta ze zmiennej globalnej $post.

    Poniżej gotowy kod:

    <?php
    
    if (get_post_type() === 'produkty') {
    
                    $post_id = get_the_ID();
    
                    //Pobierz kategorię ( term )
                    $cat = wp_get_post_categories($post_id);
    
                    $term = '';
                    if (isset($cat[0])) //  Pobiera pierwszą kategorię, jeżeli jest ich więcej
                        $term = get_term_by('id', $cat[0], 'category');
    
                    // Gdy udało się pobrać kategorię
                    if (!empty($term)) {
    
                        // Pobierz produkty
                        $args = array(
                            'posts_per_page' => 5,
                            'exclude' => array($post_id), // Nie pobieraj produktu, który jest teraz wyświetlany
                            'category' => $term->term_id
                        );
    
                        $products = get_posts($args);
    
                        // Gdy udało się pobrać jakieś produkty
                        if (!empty($products)) {
                            foreach ($products as $product) {
                                echo $product->post_title . '<br />';
                                // ... Tutaj pisz HTML
                            }
                        }
                    }
                }
                ?>
    Thread Starter Kadai

    (@kadai)

    Bardzo doceniam pomoc ale dalej coś nie gra bo nic nie wyświetla się jak wrzucę ten kod do single.php

    Spokojnie. Rozwiązanie jest już bardzo blisko 🙂

    Dodaj do tablicy $args jeszcze to: 'post_type' => 'produkty'

    Thread Starter Kadai

    (@kadai)

    Jesteśmy coraz bliżej ale wciąż na stronie nic się nie wyświetla 🙁

Viewing 9 replies - 1 through 9 (of 9 total)
  • Temat ‘Więcej w tej kategori’ jest zamknięty na nowe odpowiedzi.