我想为Wordpress创建一个如下所示的存档页面模板:
2009年8月
2009年7月
所以,基本上,我想要博客中的所有帖子,按日期降序排序,按月分组。 有人可以为我提供PHP代码吗?
谢谢!
PS:Wordpress版本为2.8.2
答案 0 :(得分: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();
}
}
?>
答案 1 :(得分:0)
我使用了上面的函数,但用以下代码替换了SQL查询:
$results = query_posts('post_type=post&post_status=publish&cat=3');
这允许我使用@ scompt.com编写的优秀函数,但将其限制为单个博客类别。
答案 2 :(得分: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();
}
}