WordPress增加文章归档的功能
WordPress自带了一个归档的功能,但是只能显示在网页中的某一个部分,但是我想单独使用一个归档页面,因为看见很多网站都有这个,在网上查找了下方法,并应用到了自己的网站上,方法如下:
特点:
1. 按照年份、月份显示文章列表
2. 显示每月的文章数量(需要配合及Query)
3. 显示每篇文章的评论数
4. 使用 WordPress 原生函数实现数据调用
5. 这个存档函数会在数据库生成一个表 zww_archives_list 来做缓存,只在发表/修改文章时才更新,减少数据库查询。
6. 即使不使用第5点的数据库缓存功能也比以前的直接 SQL 语句省资源。
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。