• Witam,
    Jestem pewien że kiedyś widziałem rozwiązanie mojego problemu, ale nie mogę znaleźć:
    Chciałbym aby w jednym sidebarze pojawiała się lista 5 ostatnich postów (excerpt) , ale żeby pierwszy z nich miał dodatkowo swoją miniaturkę.
    Będę wdzięczny za pomoc.

Viewing 7 replies - 1 through 7 (of 7 total)
  • Twórca wątku byker

    (@byker)

    Ok, poradziłem sobie w ten sposób, ale czy użycie 2 query jest w moim przypadku konieczne? Moze da sie to załatwić przy pomocy jednej pętli?

    <?php $the_query = new WP_Query( 'posts_per_page=1&cat=3' );?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post();?>
    wyswietl wpis z miniaturką
    <?php endwhile;?>
    <?php // Reset Post Data
    wp_reset_postdata(); ?>
    <?php $the_query = new WP_Query( 'posts_per_page=4&cat=3&offset=1' );?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post();?>
    wyswietl sam wpis
    <?php endwhile;?>
    <?php // Reset Post Data
    wp_reset_postdata(); ?>

    Można to jeszcze w ten sposób zrobić (według mnie prostszy):

    <div style="width: 960px;" id="last-5">
    <div id="first-thumb" >
    
      <?php $my_query = new WP_Query('showposts=5');
      while ($my_query->have_posts()) : $my_query->the_post();
      $do_not_duplicate = $post->ID;?>
    
    	<div id="posty-w-sliderze" >
      <?php the_post_thumbnail();?>
    
    	<?php the_title(); ?>
        <!-- Do stuff... -->
    	<?php the_excertp ();?>
    	<?php endwhile; ?>
    
    	</div>
    
    </div>
    <div class="clear"></div>
    
    <div id="pozostale-4">
    
      <?php if (have_posts()) : while (have_posts()) : the_post();
      if( $post->ID == $do_not_duplicate ) continue; ?>
    
     <!-- Do other stuff... -->
       <?php the_title(); ?>
        <!-- Do stuff... -->
    	<?php the_excertp ();?>
    
    <!-- Koniec Wyliczanki -->
      <?php endwhile; else: ?>
    
    		<p><?php _e('Sorry, no posts matched your criteria.'); ?></p><?php endif; ?>
    </div>			
    
    <!-- Czyszczenie! --><div class="clear"></div>
    
    </div>

    Paweł Nowak:
    W drugiej pętli chyba brakuje Ci odwołania do $my_query, więc posty będą z dwóch różnych query brane. No i będziesz drukował first-thumb nawet wtedy, gdy nie ma w ogóle postów 😉

    byker:
    2 query oczywiście są zbędne… Możesz zrobić tak:


    <?php $my_query = new WP_Query( array(...Twoje warunki...) ); ?>
    <?php if ( $my_query->have_posts() ): $my_query->the_post(); ?>
    .. TUTAJ WYPISZ PIERWSZY WPIS Z MINIATURKA
    <?php else: ?>
    .. TUTAJ WSTAW TO, CO CHCESZ, GDY NIE MA WPISOW
    <?php endif; ?>
    <?php while ( $my_query->have_posts() ): $my_query->the_post(); ?>
    .. TUTAJ WYPISZ POZOSTAŁE WPISY
    <?php endwhile; ?>

    Krzyśku – jest to sprawdzony kod- wyświetla się 5 ostatnich postów pomimo tego że w drugiej pętli nie ma $my_query jak napisałeś. Pierwszy z miniaturą, pozostałe bez.

    5 ostatnich czyli najnowszych postów.

    Ten przykład pochodzi z:

    Codex#The_Loop#Multiple_Loops_in_Action

    Pawle:
    Pewnie tak, ale zobacz, co robi ten kod. Przecież sam fakt, że w drugim ifie musisz się zabezpieczać przed duplikatem sugeruje, że te pętle iterują po 2 różnych query 😉 Gdyby to było jedno query, to to zabezpieczenie nie byłoby potrzebne (bo iterując po jednym query nie wybierzesz kilka razy tego samego wpisu).

    Innymi słowy, jeśli nie będziesz wybierał ogólnie najnowszych wpisów, tylko je dodatkowo filtrował (powiedzmy, że chcesz wyświetlić tylko wpisy z danej kategorii), to pierwsza pętla wyświetli filtry zgodnie z Twoim filtrem, a druga pętla będzie wyświetlać wpisy zgodne z globalnym query.

    Co więcej, w pierwszym while’u iterujesz po max 5 wpisach, wyświetlając ich thumbnaile i escerpty, a do nieduplikowania zapamiętujesz tylko ostatni, więc pozostałe się mogą powtórzyć.

    Swoją drogą, jesteś pewien, że ten kod dobrze wkleiłeś? Bo przy tej konstrukcji, on nawet nie produkuje zbalansowanych tagów HTML. Zauważ, że w pierwszym while’u nie zamykasz żadnego diva, a go otwierasz. Ponieważ pierwszy while wykona się dla każdego znalezionego wpisu z $my_query, to znaczy, że możesz tego diva otworzyć 5 razy…

    Aha – no tak – zgadza się Krzyśku. Żeby było 5 postów w Ustawieniach czytania dla: Strony blogu wyświetlają maksymalnie => daje 5.

    Ten sposób wykorzystuje akurat na blogu żeby pokazać pierwszy post jako wypis a pozostałe jako linki. 🙂 [Nie wspomniałem o tym]

    Dlatego, żeby u @byker działało to poprawniej musi sobie go zmodyfikować tak jak piszesz.

Viewing 7 replies - 1 through 7 (of 7 total)
  • Temat ‘kilka ostanich postów z miniaturką’ jest zamknięty na nowe odpowiedzi.