北极寒流 » 网络资源 » 免插件实现WordPress日志存档功能 - 2010.08.08

免插件实现WordPress日志存档功能

免插件实现WordPress日志存档功能特点: 1. 这个存档函数会在数据库生成一个表 SHe_archives_25216,用来保存在文章新发表/删除文章时生成的 html,这主要是加快访问速度,不用每次都要查询数据库生成归档。
2. 显示每月文章数
3. 显示每篇文章的评论数
下面是详细步骤
1. 把下面的 archives_list_SHe 函数代码扔进主题的 functions.php 里面

function archives_list_SHe() {

     global $wpdb,$month;

     $lastpost = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_date <'" . current_time('mysql') . "' AND post_status='publish' AND post_type='post' AND post_password='' ORDER BY post_date DESC LIMIT 1");

     $output = get_option('SHe_archives_'.$lastpost);

     if(empty($output)){

         $output = '';

         $wpdb->query("DELETE FROM $wpdb->options WHERE option_name LIKE 'SHe_archives_%'");

         $q = "SELECT DISTINCT YEAR(post_date) AS year, MONTH(post_date) AS month, count(ID) as posts FROM $wpdb->posts p WHERE post_date <'" . current_time('mysql') . "' AND post_status='publish' AND post_type='post' AND post_password='' GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC";

         $monthresults = $wpdb->get_results($q);

         if ($monthresults) {

             foreach ($monthresults as $monthresult) {

             $thismonth    = zeroise($monthresult->month, 2);

             $thisyear    = $monthresult->year;

             $q = "SELECT ID, post_date, post_title, comment_count FROM $wpdb->posts p WHERE post_date LIKE '$thisyear-$thismonth-%' AND post_date AND post_status='publish' AND post_type='post' AND post_password='' ORDER BY post_date DESC";

             $postresults = $wpdb->get_results($q);

             if ($postresults) {

                 $text = sprintf('%s %d', $month[zeroise($monthresult->month,2)], $monthresult->year);

                 $postcount = count($postresults);

                 $output .= '<ul class="archives-list"><li><span class="archives-yearmonth">' . $text . ' &nbsp;(' . count($postresults) . '&nbsp;' . __('篇文章','freephp') . ')</span><ul class="archives-monthlisting">' . "n";

             foreach ($postresults as $postresult) {

                 if ($postresult->post_date != '0000-00-00 00:00:00') {

                 $url = get_permalink($postresult->ID);

                 $arc_title    = $postresult->post_title;

                 if ($arc_title)

                     $text = wptexturize(strip_tags($arc_title));

                 else

                     $text = $postresult->ID;

                     $title_text = __('View this post','freephp') . ', &quot;' . wp_specialchars($text, 1) . '&quot;';

                     $output .= '<li>' . mysql2date('d日', $postresult->post_date) . ':&nbsp;' . "<a href='$url' title='$title_text'>$text</a>";

                     $output .= '&nbsp;(' . $postresult->comment_count . ')';

                     $output .= '</li>' . "n";

                 }

                 }

             }

             $output .= '</ul></li></ul>' . "n";

             }

         update_option('SHe_archives_'.$lastpost,$output);

         }else{

             $output = '<div class="errorbox">'. __('Sorry, no posts matched your criteria.','freephp') .'</div>' . "n";

         }

     }

     echo $output;

}

2. 复制一份主题的 page.php 更名为 archives.php,然后在最顶端加入:

<?php
/*
Template Name: archives
*/
?>

再然后找到类似 <?php content(); ?>,在其下面加入如下代码

<a id="expand_collapse" href="#">全部展开/收缩</a>
<div id="archives"><?php archives_list_SHe(); ?></div>

进wp后台添加一新页面,在右侧栏模板选择 archives 3. 如果你的主题本身加载了 jQuery 库,那么继续把下面的 jQ 代码加上去,就会有滑动伸缩效果了

/* 存档页面 jQ伸缩 */
 $('#expand_collapse,.archives-yearmonth').css({cursor:"s-resize"});
 $('#archives ul li ul.archives-monthlisting').hide();
 $('#archives ul li ul.archives-monthlisting:first').show();
 $('#archives ul li span.archives-yearmonth').click(function(){$(this).next().slideToggle('fast');return false;});
 //以下下是全局的操作
 $('#expand_collapse').toggle(
 function(){
 $('#archives ul li ul.archives-monthlisting').slideDown('fast');
 },
 function(){
 $('#archives ul li ul.archives-monthlisting').slideUp('fast');
 });

css 样式可以通过 #archive 来定义附上分享地带的CSS样式

/* 存档页 */ #archives{margin-bottom:25px;} #archives ul{margin-bottom:6px;} #archives ul li{margin: 5px 15px 5px 20px;} .archives-yearmonth{color:#666666;}

资料来源:http://zww.me/archives/25209

评论关闭