it-swarm.asia

عرض روابط المشاركات من مجموعة الفئات حسب السنة

أرغب في عرض روابط المنشورات من مجموعة فئات حسب السنة. تجميع حسب السنة بسبب وورد الافتراضي كرر تاريخ كل وظيفة. أحاول استخدام رمز لكنني حصلت على كل المشاركات في السنة الحالية. كيف يمكنني فعل ذلك؟ مثال أريد أن أفعله:

2010

  • بعد وصلة 20
  • وظيفة الرابط 19
  • وظيفة وصلة 18
  • ...
  • وظيفة رابط 8

2009

  • بعد وصلة 7
  • وظيفة وصلة 6
  • ...

الرمز:

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

لقد كتبت تلك الشفرة الأصلية على Stack Overflow ، لكنني لم أرَ ردودكم الإضافية لأنك قمت بنشرها كإجابات وليس كتعليقات على إجابتي. لقد اختبرت الكود الآن مع فئة معينة ، وهو يعمل من أجلي ، لكنه يحتاج إلى تغيير حاسم واحد: يجب أن تأتي الدعوة إلى the_post() (التي نسيت تمامًا) في بداية حلقة while ( have_posts() ) ، وإلا فإن السنة ستتخلف دائمًا وظيفة واحدة وراء. لقد صححت ذلك في الجواب الأصلي.

إذا كنت ترغب في تحديد معايير متعددة للاستعلام الخاص بك ، يجب عليك دمجها في نفس استدعاء الوظيفة. لذلك ليس query_posts('cat=27'); query_posts('nopaging=1'); ، ولكن query_posts('cat=27&nopaging=1'). يمكنك أيضًا استخدام تنسيق الصفيف (كما في المثال الأصلي الخاص بي) ، وأنا أفضل ذلك من أجل سهولة القراءة.

تغيير آخر: إذا لم تكن هذه هي الحلقة الرئيسية لصفحتك (وأظن أن هذا الرمز سينتهي به المطاف في شريط جانبي ، وبالتالي لن يكون الحل الرئيسي) ، [فمن الأفضل عدم استخدام query_posts()][2]. بدلاً من ذلك ، جرّب get_posts() واستخدم نتيجة ذلك. لم أكن أعرف ذلك عندما كتبت الإجابة الأصلية ، لكن التسكع في هذا الموقع يعلمك كثيرًا!

1
Jan Fabry

تم كسر رمزك جدًا عند نشره. مما أستطيع أن أرى query_posts() متعددة هي فكرة سيئة في معظم الحالات. يرجى تصحيح الكود إذا كنت تريد تقييم أفضل.

أنا شخصياً أستخدم المكوّن الإضافي لهذا الغرض ، فهناك الكثير من الإضافات الأرشيفية الممتازة. ألعب حاليا مع إعادة تحميل المحفوظات الذكية . يسمح بسهولة للحصول على المشاركات حسب الشهر/السنة في فئة محددة:

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

0
Rarst

ما يبدو أنك تعمل بشكل جيد .. نظرًا لأنني كنت هنا أبحث عن حلول لسؤال آخر قمت بنشره وشاهدته ، اعتقدت أنني سأضيف كيف أنجزت هذا في أحد موقعي:

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

يحل هذا العديد من مكالمات query_posts ويسهل حقًا التحكم في التصميم ، وما إلى ذلك. آمل أن يساعد هذا الشخص الذي قد يرغب في رؤية حلول متنوعة لهذا :)

العمل العظيم مرة أخرى ، على الأصل الخاص بك. حل.

0
revive

تفاصيل سؤالك غير متماسكة. يجب عليك قراءة السؤال بصوت عالٍ قبل نشره. كتلة الرمز الخاص بك هو أيضا كسر تماما.

وقال أن الجواب بسيط إلى حد ما. تحتاج إلى تشغيل استعلام منشورات يعطي قيم الفئة والسنة (بالإضافة إلى nopaging الخاص بك ، والذي يتم بشكل أفضل مع posts_per_page = -1)

راجع مقالة المخطوطة للحصول على query_posts () / للحصول على تفاصيل كاملة حول المعلمات التي يمكنك تمريرها إلى WP_Query () جديدة.

إليك رمز سؤالك:

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