搜索
Hi~登录注册
查看: 1607|回复: 0

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

[复制链接]

1892

主题

1899

帖子

6406

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6406
发表于 2015-5-14 13:49:21 | 显示全部楼层 |阅读模式
本教程我们来用实例代码讲讲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 />
&nbsp;&nbsp;&nbsp; if( !$output = get_option('zww_db_cache_archives_list') ){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $output = '&lt;div id=&quot;archives&quot;&gt;&lt;p&gt;&lt;a id=&quot;al_expand_colla<a href="/fw/photo.html" target="_blank">ps</a>e&quot; href=&quot;#&quot;&gt;全部展开/收缩&lt;/a&gt; &lt;em&gt;(注: 点击月份可以展开)&lt;/em&gt;&lt;/p&gt;';<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $args = array(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 'post_type' =&gt; 'post', //如果你有多个 post type,可以这样 array('post', 'product', 'news')&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 'posts_per_page' =&gt; -1, //全部 posts<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 'ignore_sticky_posts' =&gt; 1 //忽略 sticky posts<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; );<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $the_query = new WP_Query( $args );<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $posts_rebuild = array();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $year = $mon = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while ( $the_query-&gt;have_posts() ) : $the_query-&gt;the_post();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $post_year = get_the_time('Y');<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $post_mon = get_the_time('m');<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $post_day = get_the_time('d');<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ($year != $post_year) $year = $post_year;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ($mon != $post_mon) $mon = $post_mon;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $posts_rebuild[$year][$mon][] = '&lt;li&gt;'. get_the_time('d日: ') .'&lt;a href=&quot;'. get_permalink() .'&quot;&gt;'. get_the_title() .'&lt;/a&gt; &lt;em&gt;('. get_comments_number('0', '1', '%') .')&lt;/em&gt;&lt;/li&gt;';<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; endwhile;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; wp_reset_postdata();<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <a href="/tags.php/foreach/" target="_blank">foreach</a> ($posts_rebuild as $key_y =&gt; $y) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $output .= '&lt;h3 class=&quot;al_year&quot;&gt;'. $key_y .' 年&lt;/h3&gt;&lt;ul class=&quot;al_mon_list&quot;&gt;'; //输出年份<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; foreach ($y as $key_m =&gt; $m) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $posts = ''; $i = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; foreach ($m as $p) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ++$i;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $posts .= $p;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $output .= '&lt;li&gt;&lt;span class=&quot;al_mon&quot;&gt;'. $key_m .' 月 &lt;em&gt; ( '. $i .' 篇文章 )&lt;/em&gt;&lt;/span&gt;&lt;ul class=&quot;al_post_list&quot;&gt;'; //输出月份<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $output .= $posts; //输出 posts<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $output .= '&lt;/ul&gt;&lt;/li&gt;';<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $output .= '&lt;/ul&gt;';<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $output .= '&lt;/div&gt;';<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; update_option('zww_db_cache_archives_list', $output);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; echo $output;<br />
}<br />
function clear_db_cache_archives_list() {<br />
&nbsp;&nbsp;&nbsp; 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>缓存,只在文章发表/修改时才会更新缓存数据,所以测试时,可以特意去后台点&ldquo;快速编辑&rdquo;文章然后点更新就可以更新缓存数据。</p>
<p><strong>2. 复制一份主题的 page.php 更名为 archives.php,然后在最顶端加入:</strong><br />
<br />
&lt;?php<br />
/*<br />
Template Name: Archives<br />
*/<br />
?&gt;<br />
<br />
在 archives.php 找到类似 &lt;?php content(); ?&gt;,在其下面加入如下代码<br />
<br />
&lt;?php zww_archives_list(); ?&gt;<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&lt;1)?0:s-10 改为 s,效果会好看点。<br />
<br />
(function ($, window) {<br />
&nbsp;&nbsp;&nbsp; $(function() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var $a = $('#archives'),<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $m = $('.al_mon', $a),<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $l = $('.al_post_list', $a),<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $l_f = $('.al_post_list:first', $a);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $l.hide();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $l_f.show();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $m.css('cursor', 's-resize').on('click', function(){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $(this).next().slideToggle(400);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var animate = function(index, status, s) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (index &gt; $l.length) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (status == 'up') {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $l.eq(index).slideUp(s, function() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; animate(index+1, status, (s-10&lt;1)?0:s-10);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $l.eq(index).slideDown(s, function() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; animate(index+1, status, (s-10&lt;1)?0:s-10);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $('#al_expand_collapse').on('click', function(e){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; e.preventDefault();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ( $(this).data('s') ) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $(this).data('s', '');<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; animate(0, 'up', 100);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $(this).data('s', 1);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; animate(0, 'down', 100);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp; });<br />
})(jQuery, window);<br />
<br />
PS:不知道怎么写 js 文件然后调用的朋友就直接打开 header.php 并找到 &lt;?php wp_head(); ?&gt;,在其下面加上<br />
<br />
&lt;script type=&quot;text/<a href="/js_a/js.html" target="_blank">javascript</a>&quot;&gt;上面那段 jQuery 代码&lt;/script&gt;<br />
<br />
因为是放在主题的 the_content() 下面,所以会默认使用主题写好的 h3 ul li 格式,如果要更加有特色,那么就要自己去修改 css 了
公众微信:idc5ahl
公众QQ:吾爱互联
关注公众微信,公众QQ每天领现金卡密
卡密介绍(http://www.5ahl.com/thread-2182-1-1.html
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 点我注册

快速回复 返回顶部 返回列表