Listen Sie alle Beiträge nach Jahr mit Seitenzahlen auf

Im Moment verwende ich den folgenden Code, um alle Beiträge nach Jahr anzuzeigen:

index.php

 $posts) : ?> 

  • <a href="https://wordpress.stackexchange.com/questions/161877/list-all-posts-by-year-with-pagination/">

functionen.php

 function posts_by_year() { // array to use for results $years = array(); // get posts from WP $posts = get_posts(array( 'numberposts' => -1, 'orderby' => 'post_date', 'order' => 'ASC', 'post_type' => 'post', 'post_status' => 'publish' )); // loop through posts, populating $years arrays foreach($posts as $post) { $years[date('Y', strtotime($post->post_date))][] = $post; } // reverse sort by year krsort($years); return $years; } 

Und jetzt habe ich auf die Leseoptionen im Admin-Panel eingestellt, dass ich nur 3 Beiträge pro Seite zeigen möchte. Mit diesem neuen Code, den Beiträgen nach Jahr, werden alle Beiträge angezeigt und in den Seitennummern befinden sich 3 Seiten. Wenn Sie zu einer anderen Seite wechseln, wird der Inhalt erneut angezeigt.

Wie kann ich die Seitennummerierung jetzt einfügen, wenn ich Beiträge nach Jahr habe? Mein Paginierungscode lautet:

  

Welche ruft die function auf:

 if ( !function_exists( 'wpex_pagination' ) ) { function wpex_pagination() { $prev_arrow = is_rtl() ? '→' : '←'; $next_arrow = is_rtl() ? '←' : '→'; global $wp_query; $total = $wp_query->max_num_pages; $big = 999999999; // need an unlikely integer if( $total > 1 ) { if( !$current_page = get_query_var('paged') ) $current_page = 1; if( get_option('permalink_structure') ) { $format = 'page/%#%/'; } else { $format = '&paged=%#%'; } echo paginate_links(array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => $format, 'current' => max( 1, get_query_var('paged') ), 'total' => $total, 'mid_size' => 3, 'type' => 'list', 'prev_text' => $prev_arrow, 'next_text' => $next_arrow, ) ); } } } 

Die Idee ist, dass ich eine Anzahl von Posts einstellen kann, um angezeigt zu werden. Nicht nach Jahren, sondern nach Beiträgen. Wenn ich 30 von 2014 und 20 von 2013 habe und das Limit auf 5 gesetzt habe, werden nur die ersten 5 von 2014 angezeigt.

Danke im Voraus!

EDIT: @Pieter

    

Solutions Collecting From Web of "Listen Sie alle Beiträge nach Jahr mit Seitenzahlen auf"

Hier ist meine Herangehensweise. Was ich interpretiert und akzeptiert habe, ist, dass Sie das Jahr auf jedem ersten Post auf jeder Seite anzeigen müssen, und Sie auch nur das Jahr auf nachfolgenden Pfosten anzeigen müssen, wenn das Jahr sich von dem des ersten Jahres unterscheidet.

Ich wollte keine Extra-function verwenden, die zusätzliche db-Aufrufe machte, auch habe ich versucht, die post-Objekte zu verwenden, die über die $wp_query global verfügbar sind. Das ist, was mir eingefallen ist

SCHRITT 1

Erhalten Sie das Datum in Jahresform von dem aktuellen Post in der Schleife. Ich habe get_the_date() hier verwendet.

SCHRITT 2

Sie müssen das Post-Datum aus dem vorherigen Post abrufen, außer wenn der aktuelle Post nicht der erste Post ist. Dazu müssen Sie auf das Array $wp_query->posts zugreifen und das post_date Objekt vom vorherigen WP_Post Objekt WP_Post . Um das zu erreichen, habe ich den $wp_query->current_post , einen subtrahiert und diesen als Array-Schlüssel benutzt, um auf das Array zuzugreifen.

SCHRITT 3

post_date mysql2date das post_date mit mysql2date , um das Jahr zu erhalten, in dem der vorherige Beitrag veröffentlicht wurde.

SCHRITT 4

Wenn der aktuelle Beitrag der erste Beitrag ist, geben Sie das Jahr an, in dem der Beitrag veröffentlicht wurde. Wenn der aktuelle Beitrag nicht der erste Beitrag ist, müssen Sie das Jahr des aktuellen Beitrags mit dem Jahr des vorherigen Beitrags vergleichen. Wenn diese Werte übereinstimmen, sollte das Datum nicht gedruckt werden. Wenn diese Werte nicht übereinstimmen, drucken Sie das Datum

JETZT ALLE ZUSAMMEN!!

Sie können diesen Code jetzt zusammenfügen und in der Schleife anzeigen, in der er angezeigt werden soll

 $current_year = get_the_date('Y'); if( 0 != $wp_query->current_post ) { $f = $wp_query->current_post - 1; $old_date = mysql2date( 'Y', $wp_query->posts[$f]->post_date ); if($current_year != $old_date) { echo $current_year; } }else{ echo $current_year; } 

BEARBEITEN

Um das Datum von allen ersten Posts von nachfolgenden Seiten zu entfernen, wenn das Jahr mit dem letzten Post von der vorherigen Seite übereinstimmt, können Sie Folgendes tun

 $current_year = get_the_date('Y'); if( 0 != $wp_query->current_post ) { $f = $wp_query->current_post - 1; $old_date = mysql2date( 'Y', $wp_query->posts[$f]->post_date ); if($current_year != $old_date) { echo $current_year; } }elseif( is_paged() && 0 == $wp_query->current_post ) { $old_date = get_the_date( 'Y', get_next_post()->ID ); if($current_year != $old_date) { echo $current_year; } }else{ echo $current_year; }