一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

WordPress WP原生函数实现归档页面模板实例

时间:2015-02-04 编辑:简简单单 来源:一聚教程网

1. 归档函数

下面代码放到主题文件 functions.php 里面,另外注意代码里面有中文,所以要把 functions.php 文件编码改为 UTF8 无 BOM 格式

/* Archives list v2014 by zwwooooo | http://zww.me */
function zww_archives_list() {
    if( !$output = get_option('zww_db_cache_archives_list') ){
        $output = '

pse" href="#">全部展开/收缩 (注: 点击月份可以展开)

';
        $args = array(
            'post_type' => 'post', //如果你有多个 post type,可以这样 array('post', 'product', 'news') 
            '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) {
                $output .= '

    '. $key_y .' 年

      '; //输出年份
                  foreach ($y as $key_m => $m) {
                      $posts = ''; $i = 0;
                      foreach ($m as $p) {
                          ++$i;
                          $posts .= $p;
                      }
                      $output .= '
    • '. $key_m .' 月 ( '. $i .' 篇文章 )
        '; //输出月份
                        $output .= $posts; //输出 posts
                        $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: 因为查询度有点大,所以有加数据库缓存,只在文章发表/修改时才会更新缓存数据,所以测试时,可以特意去后台点“快速编辑”文章然后点更新就可以更新缓存数据。

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

    /*
    Template Name: Archives
    */
    ?>

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



    然后新建页面(如叫:归档),选择模版为 Archives

    3. 给主题加载 jQuery 库,没有加载的,把下面这句扔到 functions.php 里面就行了。

    wp_enqueue_script('jquery');

    4. jQuery 代码:


    这次玩了逐个下拉/收缩效果,想着很好,但我博客感觉效果一般,因为文章太多了...如果文章不多,可以把代码里面 2 个 (s-10<1)?0:s-10 改为 s,效果会好看点。

    (function ($, window) {
        $(function() {
            var $a = $('#archives'),
                $m = $('.al_mon', $a),
                $l = $('.al_post_list', $a),
                $l_f = $('.al_post_list:first', $a);
            $l.hide();
            $l_f.show();
            $m.css('cursor', 's-resize').on('click', function(){
                $(this).next().slideToggle(400);
            });
            var animate = function(index, status, s) {
                if (index > $l.length) {
                    return;
                }
                if (status == 'up') {
                    $l.eq(index).slideUp(s, function() {
                        animate(index+1, status, (s-10<1)?0:s-10);
                    });
                } else {
                    $l.eq(index).slideDown(s, function() {
                        animate(index+1, status, (s-10<1)?0:s-10);
                    });
                }
            };
            $('#al_expand_collapse').on('click', function(e){
                e.preventDefault();
                if ( $(this).data('s') ) {
                    $(this).data('s', '');
                    animate(0, 'up', 100);
                } else {
                    $(this).data('s', 1);
                    animate(0, 'down', 100);
                }
            });
        });
    })(jQuery, window);

    PS:不知道怎么写 js 文件然后调用的朋友就直接打开 header.php 并找到 ,在其下面加上



    因为是放在主题的 the_content() 下面,所以会默认使用主题写好的 h3 ul li 格式,如果要更加有特色,那么就要自己去修改 css 了

    热门栏目