|
本教程我们来用实例代码讲讲WordPress用WP原生态函数归档页面模板,归档函数放在你所在的主题目录的functions.php里面
</div><p><strong>1. 归档函数</strong><br />
<br />
下面代码放到主题文件 functions.php 里面,另外注意代码里面有中文,所以要把 functions.php 文件编码改为 UTF8 无 BOM 格式<br />
<br />
/* Archives list v2014 by zwwooooo | http://zww.me */<br />
function zww_archives_list() {<br />
if( !$output = get_option('zww_db_cache_archives_list') ){<br />
$output = '<div id="archives"><p><a id="al_expand_colla<a href="/fw/photo.html" target="_blank">ps</a>e" href="#">全部展开/收缩</a> <em>(注: 点击月份可以展开)</em></p>';<br />
$args = array(<br />
'post_type' => 'post', //如果你有多个 post type,可以这样 array('post', 'product', 'news') <br />
'posts_per_page' => -1, //全部 posts<br />
'ignore_sticky_posts' => 1 //忽略 sticky posts<br />
<br />
);<br />
$the_query = new WP_Query( $args );<br />
$posts_rebuild = array();<br />
$year = $mon = 0;<br />
while ( $the_query->have_posts() ) : $the_query->the_post();<br />
$post_year = get_the_time('Y');<br />
$post_mon = get_the_time('m');<br />
$post_day = get_the_time('d');<br />
if ($year != $post_year) $year = $post_year;<br />
if ($mon != $post_mon) $mon = $post_mon;<br />
$posts_rebuild[$year][$mon][] = '<li>'. get_the_time('d日: ') .'<a href="'. get_permalink() .'">'. get_the_title() .'</a> <em>('. get_comments_number('0', '1', '%') .')</em></li>';<br />
endwhile;<br />
wp_reset_postdata();<br />
<br />
<a href="/tags.php/foreach/" target="_blank">foreach</a> ($posts_rebuild as $key_y => $y) {<br />
$output .= '<h3 class="al_year">'. $key_y .' 年</h3><ul class="al_mon_list">'; //输出年份<br />
foreach ($y as $key_m => $m) {<br />
$posts = ''; $i = 0;<br />
foreach ($m as $p) {<br />
++$i;<br />
$posts .= $p;<br />
}<br />
$output .= '<li><span class="al_mon">'. $key_m .' 月 <em> ( '. $i .' 篇文章 )</em></span><ul class="al_post_list">'; //输出月份<br />
$output .= $posts; //输出 posts<br />
$output .= '</ul></li>';<br />
}<br />
$output .= '</ul>';<br />
}<br />
<br />
$output .= '</div>';<br />
update_option('zww_db_cache_archives_list', $output);<br />
}<br />
echo $output;<br />
}<br />
function clear_db_cache_archives_list() {<br />
update_option('zww_db_cache_archives_list', ''); // 清空 zww_archives_list<br />
}<br />
add_action('save_post', 'clear_db_cache_archives_list'); // 新发表文章/修改文章时<br />
<br />
PS: 因为查询度有点大,所以有加<a href="/database/database.html" target="_blank">数据库</a>缓存,只在文章发表/修改时才会更新缓存数据,所以测试时,可以特意去后台点“快速编辑”文章然后点更新就可以更新缓存数据。</p>
<p><strong>2. 复制一份主题的 page.php 更名为 archives.php,然后在最顶端加入:</strong><br />
<br />
<?php<br />
/*<br />
Template Name: Archives<br />
*/<br />
?><br />
<br />
在 archives.php 找到类似 <?php content(); ?>,在其下面加入如下代码<br />
<br />
<?php zww_archives_list(); ?><br />
<br />
然后新建页面(如叫:归档),选择模版为 Archives</p>
<p><strong>3. 给主题加载 jQuery 库,没有加载的,把下面这句扔到 functions.php 里面就行了。</strong><br />
<br />
wp_enqueue_script('jquery');<br />
<strong><br />
4. jQuery 代码:</strong><br />
<br />
这次玩了逐个下拉/收缩效果,想着很好,但我博客感觉效果一般,因为文章太多了...如果文章不多,可以把代码里面 2 个 (s-10<1)?0:s-10 改为 s,效果会好看点。<br />
<br />
(function ($, window) {<br />
$(function() {<br />
var $a = $('#archives'),<br />
$m = $('.al_mon', $a),<br />
$l = $('.al_post_list', $a),<br />
$l_f = $('.al_post_list:first', $a);<br />
$l.hide();<br />
$l_f.show();<br />
$m.css('cursor', 's-resize').on('click', function(){<br />
$(this).next().slideToggle(400);<br />
});<br />
var animate = function(index, status, s) {<br />
if (index > $l.length) {<br />
return;<br />
}<br />
if (status == 'up') {<br />
$l.eq(index).slideUp(s, function() {<br />
animate(index+1, status, (s-10<1)?0:s-10);<br />
});<br />
} else {<br />
$l.eq(index).slideDown(s, function() {<br />
animate(index+1, status, (s-10<1)?0:s-10);<br />
});<br />
}<br />
};<br />
$('#al_expand_collapse').on('click', function(e){<br />
e.preventDefault();<br />
if ( $(this).data('s') ) {<br />
$(this).data('s', '');<br />
animate(0, 'up', 100);<br />
} else {<br />
$(this).data('s', 1);<br />
animate(0, 'down', 100);<br />
}<br />
});<br />
});<br />
})(jQuery, window);<br />
<br />
PS:不知道怎么写 js 文件然后调用的朋友就直接打开 header.php 并找到 <?php wp_head(); ?>,在其下面加上<br />
<br />
<script type="text/<a href="/js_a/js.html" target="_blank">javascript</a>">上面那段 jQuery 代码</script><br />
<br />
因为是放在主题的 the_content() 下面,所以会默认使用主题写好的 h3 ul li 格式,如果要更加有特色,那么就要自己去修改 css 了 |
|