it-swarm.dev

Zobrazit odkazy na příspěvky ze skupiny kategorií podle roku

Chci zobrazit odkazy na příspěvky ze skupiny kategorií podle roku. Group by year ve výchozím nastavení wordpress opakovat datum pro každý příspěvek. Snažím se použít kód, ale mám všechny příspěvky v běžném roce. Jak to mohu udělat? Příklad chci:

2010

  • poštovní odkaz 20
  • poštovní odkaz 19
  • poštovní odkaz 18
  • ...
  • poštovní odkaz 8

2009

  • odkaz na poštu 7
  • odkaz na poštu 6
  • ...

Kód:

<?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

Napsal jsem , že původní kód na přetečení zásobníku , ale vaše další odpovědi jsem neviděl, protože jste je odeslali jako odpovědi a ne jako komentáře k mé odpovědi. Nyní jsem testoval kód se specifickou kategorií a funguje to pro mě, ale potřebuje jednu zásadní změnu: volání na the_post() (které jsem úplně zapomněl) musí přijít přímo na začátek smyčky while ( have_posts() ), jinak bude rok vždy zaostávat jeden post za sebou. Opravil jsem to v původní odpovědi.

Chcete-li pro dotaz zadat více kritérií, musíte je zkombinovat ve stejném volání funkce. Takže ne query_posts('cat=27'); query_posts('nopaging=1');, ale query_posts('cat=27&nopaging=1'). Můžete také použít formát pole (jako v mém původním příkladu), preferuji to pro čitelnost.

Poslední změna: pokud to není hlavní smyčka vaší stránky (a domnívám se, že tento kód skončí v postranním panelu, takže ne hlavní smyčka), [je lepší nepoužívat query_posts()][2]. Místo toho zkuste get_posts() a použijte výsledek. Nevěděl jsem to, když jsem napsal původní odpověď, ale visí na tomto místě se naučí hodně!

1
Jan Fabry

Váš kód byl při odeslání velmi rozbitý. Z toho, co vidím více query_posts(), je ve většině případů špatný nápad. Opravte prosím kód, pokud chcete lepší hodnocení.

Osobně bych použít plugin pro to, existuje spousta vynikající archiv pluginy kolem. Momentálně hraju s Smart Archives Reloaded . To umožňuje snadno získat příspěvky podle měsíce/roku v konkrétní kategorii:

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

0
Rarst

To, co vypadá, že funguje dobře .. Vzhledem k tomu, že jsem zde hledal řešení pro jinou otázku, kterou jsem poslal a narazil na tuto, myslel jsem, že bych přidal, jak jsem to provedl na jedné z mých stránek:

            <?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-->   

To eliminuje několik dotazů query_posts a je opravdu snadné ovládat styling, atd .. Doufám, že to pomůže někomu, kdo může být chtít vidět různá řešení tohoto :)

Skvělá práce znovu, na vašem orig. řešení.

0
revive

Podrobnosti o vaší otázce jsou nesoudržné. Před odesláním byste si měli přečíst otázku nahlas. Váš kódový blok je také zcela zlomený.

To znamená, že odpověď je poměrně jednoduchá. Musíte spustit dotaz na příspěvky, který poskytuje jak hodnoty kategorie, tak roku (stejně jako nopaging, což je nejlepší s příspěvky posts_per_page = -1)

Viz článek s kódem pro dotaz_posts () pro úplné podrobnosti o prarametrech, které můžete přenést do nového WP_Query ().

Zde je kód vaší otázky:

/**
 * 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