今天在制作一个主题时,突然就想尝试下用WordPress原生函数来实现归档页面的内容调用。
经过测试,我使用了WordPress推荐的WP_Query() 函数来调用所有文章,除了每月的文章数量无法直接调用到外,其它数据都可以实现,虽然可以借助另外的WP原生函数实现每月文章数量,但是比较繁琐。所以我另外想了个办法:我博客的存档页是用了jQuery来实现每月文章列表的伸缩效果,于是每月文章数量显示我就用jQuery来实现了。
下面是过程和方法,有兴趣的朋友可以试试。
折腾功能:代码实现WordPress归档页面模板[WP原生函数篇]
原创作者:zwwooooo
特点:
1. 按照年份、月份显示文章列表
2. 显示每月的文章数量(需要配合及Query)
3. 显示每篇文章的评论数
4. 使用 WordPress 濮阳网站建设公司原生函数实现数据调用
5. 这个存档函数会在数据库生成一个表 zww_archives_list 来做缓存,只在发表/修改文章时才更新,减少数据库查询。
6. 即使不使用第5点的数据库缓存功能也比以前的直接 SQL 语句省资源。
在线演示效果:见我博客的存档页
效果图:
步骤:
1. 把下面的函数扔到所用主题的 functions.php 文件里面:(注意:因为有中文,所以要把 functions.php 文件转换为 UTF8 无 BOM 格式,不然中文会乱码)
/* Archives list by zwwooooo | http://zww.me */
function zww_archives_list() {
if( !$output = get_option('zww_archives_list') ){
$output = 'div id="archives"p[a id="al_expand_collapse" href="#"全部展开/收缩/a] em(注: 点击月份可以展开)/em/p';
$the_query = new WP_Query( 'posts_per_page=-1' );
$year=0; $mon=0; $i=0; $j=0;
while ( $the_query-have_posts() ) : $the_query-the_post();
$year_tmp = get_the_time('Y');
$mon_tmp = get_the_time('m');
$y=$year; $m=$mon;
if ($mon != $mon_tmp && $mon 0) $output .= '/ul/li';
if ($year != $year_tmp && $year 0) $output .= '/ul';
if ($year != $year_tmp) {
$year = $year_tmp;
$output .= 'h3 class="al_year"'. $year .' 年/h3ul class="al_mon_list"'; //输出年份
}
if ($mon != $mon_tmp) {
$mon = $mon_tmp;
$output .= 'lispan class="al_mon"'. $mon .' 月/spanul class="al_post_list"'; //输出月份
}
$output .= 'li'. get_the_time('d日: ') .'a href="'. get_permalink() .'"'. get_the_title() .'/a em('. get_comments_number('0', '1', '%') .')/em/li'; //输出文章日期和标题
endwhile;
wp_reset_postdata();
$output .= '/ul/li/ul/div';
update_option('zww_archives_list', $output);
}
echo $output;
}
function clear_zal_cache() {
update_option('zww_archives_list', ''); // 清空 zww_archives_list
}
add_action('save_post', 'clear_zal_cache'); // 新发表文章/修改文章时
2. 复制一份主题的 page.php 更名为 archives.php,然后在最顶端加入:
?php
/*
Template Name: archives
*/
?
然后找到类似 ,在其下面加入如下代码
?php zww_archives_list(); ?
进wp后台添加一新页面,在右侧栏模板选择 archives
3. 给主题加载 jQuery 库,没有加载的,把下面这句扔到 functions.php 里面就行了。
wp_enqueue_script('jquery');
4. jQuery 效果代码
jQuery(document).ready(function($){
//===================================存档页面 jQ伸缩
(function(){
$('#al_expand_collapse,#archives span.al_mon').css({cursor:"s-resize"});
$('#archives span.al_mon').each(function(){
var num=$(this).next().children('li').size();
var text=$(this).text();
$(this).html(text+'em ( '+num+' 篇文章 )/em');
});
var $al_post_list=$('#archives ul.al_post_list'),
$al_post_list_f=$('#archives ul.al_post_list:first');
$al_post_list.hide(1,function(){
$al_post_list_f.show();
扬州网站建设公司 });
$('#archives span.al_mon').click(function(){
$(this).next().slideToggle(400);网站设计常用图标
return false;
});
$('#al_expand_collapse').toggle(function(){
$al_post_list.show();
},function(){
$al_post_list.hide();
});
})();
});
PS:不知道怎么写js文件调用的就直接打开 header.php 并找到 ?php wp_head(); ?,在商洛网站建设公司 其下面加上
script type="text/javascript"上面那段jQuery代码/script
4. css根据需要写,不写也可以的。HTML结构:
div id="archives"
p[a id="al_expand_collapse" href="#"全部展开/收缩/a] em(注: 点击月份可以展开)/em/p
h3 class="al_year"'年份/h3
ul class="al_mon_list"
lispan class="al_mon"月份em (本月文章数量)/em/span
ul class="al_post_list"
li号数: a href="文章链接"文章标题/a em(评论数量)/em/li
/ul
/li
/ul
/div
折腾完,收工!
原文地址:http://zww.me/archives/25589
南京牧狼文化传媒有限公司简介:
牧狼传媒,牧者之心,狼者之性,以牧之谦卑宽容之心待人,以狼之团结无畏之性做事!
公司注册资金100万,主营众筹全案服务、网站营销全案服务、网站建设、微信小程序开发、电商网店设计、H5页面设计、腾讯社交广告投放以及电商营销推广全案等相关业务,致力于为客户提供更有价值的服务,创造让用户满意的效果!
为百度官方及其大客户、苏宁易购、金山WPS秀堂、美的、创维家电、新东方在线、伊莱克斯、宝丽莱等国内国外知名品牌服务过,服务经验丰富!同时,公司也是南京电子商务协会会员单位、猪八戒网官方认证签约服务商、江苏八戒服务网联盟、南京浦口文化产业联合会会员单位,可以为您提供更好的服务!
主营项目:众筹全案服务、网站营销全案服务、网站建设、微信小程序开发、电商网店设计、H5页面设计、腾讯社交广告投放、竞价托管、网站优化、电商代运营等
合作客户:百度、苏宁易购、饿了么、美的、创维家电、新东方在线、宝丽莱、金山WPS秀堂、伊莱克斯
资质荣誉:百度商业服务市场2017年度最佳图片服务商、南京电子商务协会会员单位、猪八戒网官方认证签约服务商、江苏八戒服务网联盟、南京浦口文化产业联合会会员单位、八戒通TOP服务商、"易拍即合杯"H5创意大赛"三等奖"。