2009-08-03 4 views
1

Я хочу создать шаблон архива страницы для Wordpress, который будет выглядеть следующим образом:Архив шаблона в Wordpress

августа 2009

  • Сообщение 4
  • Сообщение 3
  • Сообщение 2
  • Должность 1

июль 2009 г.

  • Сообщение 2
  • Сообщение 1

Так, в принципе, я хочу, чтобы все сообщения из блога, упорядоченный по убыванию по дате и сгруппированы по месяцам. Может ли кто-нибудь предоставить мне код PHP для этого?

Спасибо!

PS: Wordpress версия 2.8.2

ответ

3

Это функция, которую я создал некоторое время назад. Это в основном делает то, что вы хотите сделать, но это не шаблон. Может быть, вы можете приспособить его.

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

Спасибо вам, Ваш сниппет помог мне, и мне удалось создать страницу архива. Единственное различие заключается в том, что вместо непосредственного запроса базы данных я использую функцию get_posts Wordpress. Вот результат: http://victorhurdugaci.com/archive/ –

+0

Спасибо! Это была большая помощь - хотя вместо вашего SQL-запроса я использовал некоторые собственные функции wordpress, так как мне нужно было только набирать сообщения из одной категории. Я заменил ваш SQL с помощью - $ results = query_posts ('post_type = post & post_status = publish & cat = 3'); Отличная помощь! Благодаря!! – AshBrad

0

Я использовал выше функции, но заменить запрос SQL с:

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

Это позволило мне использовать отличные функции @ scompt.com писал, но ограничить его к одной категории блога.

0

Большое спасибо за помощь. Это то, что я использовал с приведенным выше кодом.

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

Не могли бы вы объяснить, как это отличается от ответа @ scompt.com? –

Смежные вопросы