2009-08-03 24 views
1

Ich möchte eine Archivseite Vorlage für Wordpress erstellen, die wie folgt aussehen:Archiv Vorlage in Wordpress

August 2009

  • Post 4
  • Post 3
  • Beitrag 2
  • Post 1

Juli 2009

  • Beitrag 2
  • Beitrag 1

Also, im Grunde, ich will alle Beiträge aus dem Blog, nach Datum geordnet nach absteigend und nach Monat gruppiert. Kann mir jemand den PHP Code dafür liefern?

Danke!

PS: Wordpress-Version ist 2.8.2

Antwort

3

Dies ist eine Funktion, die ich eine Weile zurück erstellt. Es tut im Grunde, was Sie tun möchten, aber es ist keine Vorlage. Vielleicht kannst du es anpassen.

<?php 
/** 
* Displays a condensed list of the posts grouped by month/year. 
* 
* @param $order The order of the posts. Either 'DESC' or 'ASC', case sensitive. 
* @param $date_prefix Whether to prefix the posts with the month/date. 
* @param $display Whether to display the results or return it as a String. 
*/ 

function condensed_post_list($order='DESC', $date_prefix=true, $display=true){ 
    global $wpdb; 

    if(!in_array($order, array('DESC','ASC'))) $order = 'DESC'; 
    $query = "SELECT ID, post_title, post_date FROM $wpdb->posts ". 
      "WHERE post_type='post' AND post_status = 'publish' ". 
      "ORDER BY post_date $order"; 
    $results = $wpdb->get_results($query); 

    ob_start(); 
    $current_month = ''; 
    foreach($results as $result) { 
     if($current_month != mysql2date('F Y', $result->post_date)) { 
      if($current_month) echo '</ul>'; 

      $current_month = mysql2date('F Y', $result->post_date); 
      echo '<h2>'.$current_month.'</h2>'; 
      echo '<ul>'; 
     } 
     echo '<li>'; 
     echo ($date_prefix ? mysql2date('M j: ', $result->post_date) : ''); 
     echo '<a href="'.get_permalink($result->ID).'">'; 
     echo $result->post_title.'</a></li>'; 
    } 
    if($current_month) echo '</ul>'; 

    if($display) { 
     ob_end_flush(); 
    } else { 
     return ob_get_clean(); 
    } 
} 
?> 
+0

Dank Sie, Ihr Snippet hat mir sehr geholfen und ich es geschafft, die Archiv-Seite zu erstellen. Der einzige Unterschied ist, dass ich statt der Datenbank direkt die Wordpress 'get_posts Funktion verwende. Hier ist das Ergebnis: http://victorhurdugaci.com/archive/ –

+0

Danke! Das war eine große Hilfe - obwohl ich anstelle Ihrer SQL-Abfrage einige native Wordpress-Funktionen verwendet habe, da ich nur Beiträge aus einer einzelnen Kategorie abrufen musste. Ich ersetzte Ihr SQL mit - $ results = query_posts ('post_type = post & post_status = publish & cat = 3'); Große Hilfe! Vielen Dank!! – AshBrad

0

verwendete ich die obige Funktion, sondern ersetzt die SQL-Abfrage mit:

$results = query_posts('post_type=post&post_status=publish&cat=3'); 

Das erlaubte mir, die ausgezeichnete Funktion @ scompt.com verwenden geschrieben, aber auf einen einzigen Blog-Kategorie zu beschränken.

0

Vielen Dank die Hilfe. Dies ist, was ich mit dem obigen Code verwendet habe.

function condensed_post_list($order='DESC', $date_prefix=true, $display=true) 
{ 
    if(!in_array($order, array('DESC','ASC'))) $order = 'DESC'; 
    $args = array(
     'numberposts'  => -1, 
     'orderby'   => 'post_date', 
     'post_type'  => 'post', 
     'post_status'  => 'publish'); 
    $results = get_posts($args); 

    ob_start(); 
    $current_month = ''; 
    foreach($results as $result) { 
     if($current_month != mysql2date('F Y', $result->post_date)) { 
      if($current_month) echo '</ul>'; 

      $current_month = mysql2date('F Y', $result->post_date); 
      echo '<h2>'.$current_month.'</h2>'; 
      echo '<ul>'; 
     } 
     echo '<li>'; 
     echo ($date_prefix ? mysql2date('M j: ', $result->post_date) : ''); 
     echo '<a href="'.get_permalink($result->ID).'">'; 
     echo $result->post_title.'</a></li>'; 
    } 
    if($current_month) echo '</ul>'; 
    if($display) { 
     ob_end_flush(); 
    } 
    else { 
     return ob_get_clean(); 
    } 
} 
+0

Können Sie uns erklären, wie sich dies von der Antwort von @scompt.com unterscheidet? –

Verwandte Themen