Bestellen Sie Beiträge nach Datum

Ich bin ein Mädchen und entschuldige mein Englisch. Vielleicht ist es einfach und ich bin dumm, es zu wissen.

Aber hier ist das Problem

Ich möchte auf der Homepage die Beiträge der letzten 3 Tage veröffentlichen.

So was:

30/03/12 

Beitrag 1

Post 2

Beitrag 3

 29/03/12 

Beitrag 1

Post 2

Beitrag 3

 28/03/12 

Beitrag 1

Post 2

Beitrag 3

Ich habe es versucht:

 $loopday = ''; if ( have_posts() ) : while ( have_posts() ) : the_post(); if ($loopday !== get_the_time('DM j')) { $loopday = get_the_time('DM j'); echo $loopday; } the_title(); the_content(); endwhile; endif; 

Aber dieser Code bestellt nur die letzten 10 Beiträge. Beispielsweise:

Am 30/03/12 habe ich 5 Beiträge

Am 29/03/12 habe ich 4 Beiträge

Am 28/03/12 habe ich 3 Beiträge

So fehlen am 3. Tag nun 2 Beiträge.

Auch ich möchte das auf der Archivseite verwenden.

3 Tage pro Seite.

Auf Seite 2 die nächsten 3 Tage.

Ich bin wirklich hoffnungslos ..

xx

Solutions Collecting From Web of "Bestellen Sie Beiträge nach Datum"

Drei Schleifen

http://codex.wordpress.org/Class_Reference/WP_Query#Time_Parameters

 $time = time(); foreach ( range( 0, 2 ) as $yesterday ): // get relative time offset by $yesterday days $rel_time = strtotime( "-$yesterday days", $time ); // get the digits $year = date( 'Y', $rel_time ); $day = date( 'd', $rel_time ); $month = date( 'm', $rel_time ); // get the posts foreach ( get_posts( 'year=' . $year . '&monthnum=' . $month . '&day=' . '$day&posts_per_page=3' ) as $post ): setup_postdata( $post ); the_title(); the_content(); endforeach; endforeach; 

Sie können auch auf andere effizientere Weise um die $time drehen. Merken Sie sich 3 Schleifen = 3 databaseabfragen.

SQL

http://codex.wordpress.org/Class_Reference/wpdb

 global $wpdb; $sql = "SELECT * FROM `$wpdb->posts` WHERE 1=0"; $time = time(); for ( $i = 0; $i < 3; $i++ ) { $time = strtotime( "-1 day", $time ); // deduct one day every time $year = $wpdb->escape( date( 'Y', $time ) ); $day = $wpdb->escape( date( 'd', $time ) ); $month = $wpdb->escape( date( 'm', $time ) ); $sql .= " OR `ID` IN ( SELECT `ID` FROM `$wpdb->posts` WHERE YEAR(`post_date`) = '$year' AND MONTH(`post_date`) = '$month' AND DAY(`post_date`) = '$day' LIMIT 3)"; } foreach( $wpdb->get_results( $sql, OBJECT_K ) as $post ): setup_postdata( $post ); // ...display stuff endforeach; 

Dies führt zu etwas wie:

 SELECT * FROM `wp_posts` WHERE 1=0 OR `ID` IN ( SELECT `ID` FROM `wp_posts` WHERE YEAR(`post_date`) = '2012' AND MONTH(`post_date`) = '03' AND DAY(`post_date`) = '30' LIMIT 3) OR `ID` IN ( SELECT `ID` FROM `wp_posts` WHERE YEAR(`post_date`) = '2012' AND MONTH(`post_date`) = '03' AND DAY(`post_date`) = '29' LIMIT 3) OR `ID` IN ( SELECT `ID` FROM `wp_posts` WHERE YEAR(`post_date`) = '2012' AND MONTH(`post_date`) = '03' AND DAY(`post_date`) = '28' LIMIT 3) 

Große Abfrage mit 3 Unterabfragen. Behaart.

Fluchtmarken

 $seendays = array(); // keep track of the day numbers if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( isset( $seendays[get_the_date( 'Ymd' )] ) && $seendays[get_the_date( 'Ymd' )] > 3 ) continue; $seendays[get_the_date( 'Ymd' )] = isset( $seendays[get_the_date( 'Ymd' )] ) ? $seendays[get_the_date( 'Ymd' )] + 1 : 1; // ...display stuff endif; 

Alle drei Methoden sind ziemlich roh und müssen hier und da etwas verfeinert werden. Hoffe das hilft.