it-swarm.asia

Bir kategori grubundan yıla göre yayınlandı göster

Bir kategori grubundan gönderi bağlantılarını yıllara göre görüntülemek istiyorum. Yılbaşına göre gruplandırmak için varsayılan wordpress her yazı için tarihi tekrarlayın. Bir kod kullanmaya çalışıyorum ama mevcut yılda bütün postalarım var. Nasıl yapabilirim? Örnek yapmak istiyorum:

2010

  • bağlantı 20
  • bağlantı 19
  • bağlantı 18
  • ...
  • bağlantı 8

2009

  • bağlantı 7
  • bağlantı gönder 6
  • ...

Kod:

<?php
query_posts(array('nopaging' => 1, /* desabilitar a paginacao pata obter todos os pots. O padrao e ordenado pela data */));
$prev_year = null;

query_posts('cat=27');

if ( have_posts() ) {
   while ( have_posts() ) {
      $this_year = get_the_date('Y');
      if ($prev_year != $this_year) {
          // Year boundary
          if (!is_null($prev_year)) {
             // A list is already open, close it first
             echo '</ul>';
          }
          echo '<h2 class="titulo-conteudo">'. $this_year . '</h2>';
   echo '<div class="barra-amarela-4"></div>';
              echo '<ul>';
          }
      echo '<li>';

      // Imprimi o link do post.
  the_post(); ?>

                <div class="entry">
  <h2 id="post-<?php the_ID(); ?>">
  <a href="<?php the_permalink(the_title()) ?>"><?php the_title(); ?></a></h2>


  </div>  

<?php 

      echo '</li>';
      $prev_year = $this_year;

   }
   echo '</ul>';

}

?>
2
Henrique Barone

Yığın Taşması’nın orjinal kodu yazdım, fakat yanıtlarımı cevaplar olarak gönderdiğiniz ve cevaplarıma yorum olarak gönderdiğiniz için başka yanıtlarınızı görmedim. Kodu şimdi belirli bir kategoride test ettim ve benim için çalışıyor, ancak çok önemli bir değişikliğe ihtiyacı var: the_post() (ki tamamen unuttuğum) çağrısı while ( have_posts() ) döngüsünün başlangıcında gelmeli, yoksa yıl daima gecikecek Bir posta ardında. Orijinal cevabında bunu düzelttim.

Sorgunuz için birden çok ölçüt belirtmek istiyorsanız, bunları aynı işlev çağrısında birleştirmelisiniz. Öyleyse query_posts('cat=27'); query_posts('nopaging=1'); değil, query_posts('cat=27&nopaging=1'). Dizi biçimini de kullanabilirsiniz (orijinal örneğimde olduğu gibi), okunabilirliği tercih ederim.

Son bir değişiklik: Bu, sayfanızın ana döngüsü değilse (ve bu kodun bir kenar çubuğunda biteceğinden şüpheliyim, bu yüzden ana döngü değil), [query_posts()][2] işlevini kullanmamak daha iyidir. Bunun yerine, get_posts() işlevini deneyin ve bunun sonucunu kullanın. Orijinal cevabı yazdığımda bunu bilmiyordum, ama bu sitede dolaşmak sizi çok şey öğreniyor!

1
Jan Fabry

Kodunuz gönderildiğinde çok kırıldı. Birden fazla görebildiğim kadarıyla query_posts() çoğu durumda kötü bir fikirdir. Daha iyi değerlendirme yapmak istiyorsanız lütfen kodunuzu düzeltin.

Şahsen bunun için eklenti kullanırdım, etrafta pek çok mükemmel arşiv eklentisi var. Şu anda Smart Archives Reloaded ile oynuyorum. Belirli bir kategoride ay/yıla göre kolayca gönderi yapmanıza olanak sağlar:

smart_archives( array( 'format' => 'list', 'include_cat' => 27 ));

0
Rarst

Neyin işe yaramadığını görüyorsun .. Buraya gönderdiğim ve karşılaştığım başka bir sorunun çözümlerini aramaya başladığımdan beri, bunu sitelerimden birinde nasıl başardığımı ekleyeceğimi düşündüm:

            <?php query_posts('posts_per_page=-1&category_name=podcasts');
            $dates_array            = Array();
            $year_array             = Array();
            $i                      = 0;
            $prev_post_ts           = null;
            $prev_post_year         = null;
            $distance_multiplier    =  9;
        ?>

        <div class="post">

            <!--h2 class="title">< ? php the_title(); ?></h2-->

            <div id="archives" class="entry">   
            <?php while (have_posts()) : the_post();

                $post_ts    =  strtotime($post->post_date);
                $post_year  =  get_the_date('Y');


                /* Handle the first year as a special case */
                if ( is_null( $prev_post_year ) ) {
                    ?>
                    <h3 class="archive_year"><?=$post_year?></h3>
                    <ul class="archives_list">
                    <?php
                }
                else if ( $prev_post_year != $post_year ) {
                    /* Close off the OL */
                    ?>
                    </ul>
                    <?php

                    $working_year  =  $prev_post_year;

                    /* Print year headings until we reach the post year */
                    while ( $working_year > $post_year ) {
                        $working_year--;
                        ?>
                        <h3 class="archive_year"><?=$working_year?></h3>
                        <?php
                    }

                    /* Open a new ordered list */
                    ?>
                    <ul class="archives_list">
                    <?php
                }

                /* Compute difference in days */
                if ( ! is_null( $prev_post_ts ) && $prev_post_year == $post_year ) {
                    $dates_diff  =  ( date( 'z', $prev_post_ts ) - date( 'z', $post_ts ) ) * $distance_multiplier;
                }
                else {
                    $dates_diff  =  0;
                }
            ?>
                <li>
                    <span class="date"><?php the_time('F j'); ?><sup><?php the_time('S') ?></sup></span> 
                    <span class="linked"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></span> 
                    <span class="comments"><?php comments_popup_link(__('0 comments', 'warp'), __('1 comment', 'warp'), __('% comments', 'warp')); ?></span> 
                </li>
            <?php
                /* For subsequent iterations */
                $prev_post_ts    =  $post_ts;
                $prev_post_year  =  $post_year;
            endwhile;

            /* If we've processed at least *one* post, close the ordered list */
            if ( ! is_null( $prev_post_ts ) ) {
                ?>
            </ul>
            <?php } ?>

            </div><!--entry-->

            </div><!--post-->   

Bu çoklu query_posts çağrıları ortadan kaldırır ve stil, vb kontrol etmek gerçekten kolaydır .. Bu, bunun için çeşitli çözümler görmek isteyebilecek biri yardımcı olur umarım :)

Orjinalinde yine harika iş çıkardın. çözüm.

0
revive

Sorunuzun ayrıntıları tutarsız. Göndermeden önce soruyu yüksek sesle kendiniz okumalısınız. Kod bloğunuz da tamamen bozuldu.

Bu cevap oldukça basit olduğunu söyledi. Hem kategori hem de yıl değeri veren bir mesaj sorgusu çalıştırmanız gerekiyor (ayrıca, posts_per_page = -1 ile en iyi şekilde yapılan nopaging'iniz)

Yeni WP_Query () 'e aktarabileceğiniz prarametreler hakkında ayrıntılı bilgi için query_posts ()) için _ kodeksi makalesine bakın.

İşte sorunuzun kodu:

/**
 * Run a query for a specific category (cat=$cat_id) and year (&y=2008)
 * Also turn off the paging by setting posts_per_page to -1
 */
$year_and_category_query = new WP_Query("cat=$cat_id&year=2007&posts_per_page=-1");

/**
 * Run the loop on your new query
 */
while ($year_and_category_query->have_posts()) : $year_and_category_query->the_post();
    // Use the post with functions like the_title, or use the now global $post
endwhile;
0
jerclarke