站点图标 度崩网-几度崩溃

WordPress增加文章归档的功能[WordPress教程]

WordPress增加文章归档的功能[WordPress教程]
效果图
WordPress自带了一个归档的功能,但是只能显示在网页中的某一个部分,但是我想单独使用一个归档页面,因为看见很多网站都有这个,在网上查找了下方法,并应用到了自己的网站上,方法如下:
特点:
1. 按照年份、月份显示文章列表
2. 显示每月的文章数量(需要配合及Query)
3. 显示每篇文章的评论数
4. 使用 WordPress 原生函数实现数据调用
5. 这个存档函数会在数据库生成一个表 zww_archives_list 来做缓存,只在发表/修改文章时才更新,减少数据库查询。
6. 即使不使用第5点的数据库缓存功能也比以前的直接 SQL 语句省资源。
一、 创建归档函数
下面代码放到主题文件 functions.php 里面,另外注意代码里面有中文,所以要把 functions.php 文件编码改为 UTF8 无 BOM 格式。
function zww_archives_list() {        if( !$output = get_option('zww_db_cache_archives_list') ){            $output = '全部展开/收缩 (注: 点击月份可以展开)';            $args = array(                'post_type' => array('archives', 'post', 'zsay'),                'posts_per_page' => -1, //全部 posts                'ignore_sticky_posts' => 1 //忽略 sticky posts              );            $the_query = new WP_Query( $args );            $posts_rebuild = array();            $year = $mon = 0;            while ( $the_query->have_posts() ) : $the_query->the_post();                $post_year = get_the_time('Y');                $post_mon = get_the_time('m');                $post_day = get_the_time('d');                if ($year != $post_year) $year = $post_year;                if ($mon != $post_mon) $mon = $post_mon;                $posts_rebuild[$year][$mon][] = ''. get_the_time('d日: ') .''. get_the_title() .' ('. get_comments_number('0', '1', '%') .')';            endwhile;            wp_reset_postdata();              foreach ($posts_rebuild as $key_y => $y) {                $y_i = 0; $y_output = '';                foreach ($y as $key_m => $m) {                    $posts = ''; $i = 0;                    foreach ($m as $p) {                        ++$i; ++$y_i;                        $posts .= $p;                    }                    $y_output .= ''. $key_m .' 月 ( '. $i .' 篇文章 )'; //输出月份                    $y_output .= $posts; //输出 posts                    $y_output .= '';                }                $output .= ''. $key_y .' 年 ( '. $y_i .' 篇文章 )'; //输出年份                $output .= $y_output;                $output .= '';            }              $output .= '';            update_option('zww_db_cache_archives_list', $output);        }        echo $output;    }    function clear_db_cache_archives_list() {        update_option('zww_db_cache_archives_list', ''); // 清空 zww_archives_list    }    add_action('save_post', 'clear_db_cache_archives_list'); // 新发表文章/修改文章时
PS: 因为查询度有点大,所以有加数据库缓存,只在文章发表/修改时才会更新缓存数据,所以测试时,可以特意去后台点“快速编辑”文章然后点更新就可以更新缓存数据。
二、创建模板页面
复制一份主题的 page.php 更名为 archives.php,然后在最顶端加入:

在 archives.php 找到类似 ,在其下面加入如下代码:

三、加载 jQuery 代码
打开 header.php 在 下面增加以下代码:

然后在后台—页面—新建页面(如叫:归档),选择模版为 Archives即可, 因为是放在主题的 the_content() 下面,所以会默认使用主题写好的 h3 ul li 格式,一般不需要重新添加CSS。