Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlanie postów z podkategorii Wordpress
Forum PHP.pl > Forum > PHP
Darnok017
Hej wszystkim.

Nie wiem czy dobrze trafiłem, jeżeli nie to z góry przepraszam.

Mam problem. Otóż zrobiłem stronę z newsami na wordpressie.

Stworzyłem widget, który polega na tym, że po wejściu w newsa z kategorii np. Kulinaria -> Gotowanie, wyświetla pozostałe newsy z danej kategorii.
Wszystko ładnie pięknie, ale wyświetla te newsy z kategorii głównej, a chciałbym, aby wyświetlał posty z podkategorii jeżeli jestem w newsie, który należy do jakiejś podkategorii.

Czyli będąc w Kulinaria wyświetla posty z kategorii kulinaria, natomiast będąc w podkategorii należącej do kulinaria, np. gotowanie, będzie wyświetlał posty z podkategorii gotowanie.
Poniżej aktualny kod. Z góry dzięki za pomoc.

  1. <ul id="catnav">
  2. <?php
  3. global $post;
  4. $category = get_the_category($post->ID);
  5. $category = $category[0]->cat_ID;
  6. $myposts = get_posts(array('numberposts' => 6, 'offset' => 0, 'category__in' => array($category), 'post_status'=>'publish', 'order'=>'DESC' ));
  7. foreach($myposts as $post) :
  8. setup_postdata($post);
  9. $video = get_post_meta( $post->ID, "wideo_na_stronie", true );
  10. ?>
  11. <?php
  12. if($video!= "") {
  13. $class = 'class = "videowatermark"';
  14. }else{
  15. $class= '';
  16. }
  17. ?>
  18.  
  19. <li>
  20. <div class="review-item" style="width:100%!important;">
  21. <div class="review-image">
  22. <a href="<?php the_permalink(); ?>"><img <?php echo $class ?> src="/wp-content/themes/legatus-theme/images/play.png" style="z-index: 2;position: absolute;width: 50px;margin-left: 19px;margin-top: 14px;display:none;"><?php echo get_the_post_thumbnail( $page->ID, 'thumbnail' ); ?></a>
  23. </div>
  24. <div class="review-content">
  25. <h2><a href="<?php the_permalink(); ?>">
  26. <?php the_title(); ?></a></h2>
  27. </div>
  28. </div>
  29. </li>
  30. <?php endforeach; ?>
  31. <?php wp_reset_query(); ?>
  32. </ul>
werdan
  1. <?php $args = array(
  2. 'posts_per_page' => 5,
  3. 'offset' => 0,
  4. 'category' => '',
  5. 'category_name' => '',
  6. 'orderby' => 'date',
  7. 'order' => 'DESC',
  8. 'include' => '',
  9. 'exclude' => '',
  10. 'meta_key' => '',
  11. 'meta_value' => '',
  12. 'post_type' => 'post',
  13. 'post_mime_type' => '',
  14. 'post_parent' => '',
  15. 'author' => '',
  16. 'post_status' => 'publish',
  17. 'suppress_filters' => true
  18. );
  19. $posts_array = get_posts( $args ); ?>
  20.  



Sprobuj zamiast 'category__in' dać 'category' => $category
Darnok017
Niestety nic z tego :/
Nadal pobiera newsy z głównej kategorii
grzes999
Na początku skryptu spróbuj dodać

  1. wp_reset_query();


I ustaw arggument category tak jak napisał ci werdan
Darnok017
  1. <ul id="catnav">
  2. <?php
  3. wp_reset_query();?>
  4. <?php
  5. global $post;
  6. $category = get_the_category($post->ID);
  7. $category = $category[0]->cat_ID;
  8. $this_post = $post->ID;
  9. $myposts = get_posts(array('numberposts' => 6, 'offset' => 0, 'category' => $category, 'post_status'=>'publish', 'order'=>'DESC', 'post__not_in' => array($this_post), 'suppress_filters' => true, 'post_type' => 'post' ));
  10. foreach($myposts as $post) :
  11. setup_postdata($post);
  12. $video = get_post_meta( $post->ID, "wideo_na_stronie", true );
  13. ?>
  14. <?php
  15. if($video!= "") {
  16. $class = 'class = "videowatermark"';
  17. }else{
  18. $class= '';
  19. }
  20. ?>
  21.  
  22. <li>
  23. <div class="review-item" style="width:100%!important;">
  24. <div class="review-image">
  25. <a href="<?php the_permalink(); ?>"><img <?php echo $class ?> src="/wp-content/themes/legatus-theme/images/play.png" style="z-index: 2;position: absolute;width: 50px;margin-left: 19px;margin-top: 14px;display:none;"><?php echo get_the_post_thumbnail( $page->ID, 'thumbnail' ); ?></a>
  26. </div>
  27. <div class="review-content">
  28. <h2><a href="<?php the_permalink(); ?>">
  29. <?php the_title(); ?></a></h2>
  30. </div>
  31. </div>
  32. </li>
  33. <?php endforeach; ?>
  34. </ul>


Bez zmian niestety.
grzes999
A sprawdzałeś czy w zmiennej
  1. $category
jest dobre ID, nie koniecznie pierwsza pobraną kategorią musi być porządana
Darnok017
Z tego co udało mi się zaobserwować dokładniej, pobiera on tylko główną kategorię. Nie pobiera child'a.
grzes999
Cytat(Darnok017 @ 13.08.2015, 14:38:26 ) *
Z tego co udało mi się zaobserwować dokładniej, pobiera on tylko główną kategorię. Nie pobiera child'a.


A jak masz ustawione kategorie w poście? Jest przypisany do nadrzędnej i dziecka czy tylko do dziecka?
Darnok017
Jest przypisany do nadrzędnej i do dziecka, ponieważ okruszki muszą wskazywać dokładną lokalizację.
grzes999
Poniższy kod u mnie działa, nie jestem tylko pewny jak pobierają się kategorie, ale to możesz doczytać albo potestować; ale wydaje mi się, ża najgłębsze zagnieżdzenie jest ostatnim elementem tablicy; a nie tak jak ty to robiłeś pobierałeś pierwszy, większoś parametró jakie przekazywałeś do get_post jest domyślna i nie ma potrzeby ich przekazywania.

  1. global $post;
  2. $category = get_the_category($post->ID);
  3. $category = end($category)->term_id;
  4. $myposts = get_posts(array('posts_per_page' => 6, 'exclude' => $post->ID ,'category' => $category));
  5. foreach($myposts as $post) :
  6. setup_postdata($post);
  7. the_title(); echo "<hr/>";
  8. endforeach;


Tak się nie ustawia adresu do obrazków w WP
  1. /wp-content/themes/legatus-theme/images/play.png


Co to jest $page
  1. <?php echo get_the_post_thumbnail( $page->ID, 'thumbnail' ); ?>


Są to tylko drobne rzeczy; ale popraw je lepiej
Darnok017
Super! Działa wyśmienicie! thumbsupsmileyanim.gif Dziękuję bardzo!
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-2025 Invision Power Services, Inc.