有国外的朋友发现了小站首页的免刷新分类目录(categories),表示很喜欢这个功能,委托我帮忙修改主题,现在把具体方法写出来。本文发布时,我还用的旧的方法,即分类目录都是自己手动加上去的,没用wp的函数,不过下面是接到任务后新折腾的,效果一样,通用性更好一点。
1、调用wp的函数产生分类列表
<?php wp_list_categories('orderby=name&title_li=&style=list'); ?>
前台xhtml结构:
<div id= "main"> <div id="content-post"><!--主体部分,开始显示的东西--> <!--主循环里的内容 --> </div> <div id="qkblock" style="display:none;"><!--ajax载入后显示的部分--> <div id="qs-info">Loading...</div> <div id="qs-area"></div> </div> </div>
2、php响应部分:放function.php里面,具体样式按主题设值来
/*Ajaxcat*/
function Ajaxcat(){
if( isset($_GET['action'])&& $_GET['action'] == 'Ajaxcat' ){
nocache_headers(); //(FIX for IE)
$colid = isset($_GET['col']) ? $_GET['col'] : null;
if(!$colid){
fail(__('Error post id or comment page id.'));
}else{
query_posts('cat='.$colid. '&showposts=-1');
$wp_query->is_archive = true; $wp_query->is_home = false;
while (have_posts()) { the_post(); ?>
<!--下面是前台xhtml结构,自己根据主题修改-->
<div class="post" id="post-<?php the_ID(); ?>">
<div class="data"><?php the_time('F jS, Y') ?></div>
<h3 class="title"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>">
<?php the_title(); ?>
</a></h3>
<div class="author">Posted
in <?php the_category(', ') ?> by
<?php the_author() ?> <?php edit_post_link('Edit',' | ',''); ?>
</div>
<div class="feedback">
<?php comments_popup_link(__('comments'), __('1 comments'), __('% comments'), '', __('comments off')); ?>
</div>
</div>
<?php
} wp_reset_query();//重置
}
die();
}
}
add_action('init', 'Ajaxcat');
3、jQuery ajax过程,具体选择器和效果得自己修改。
jQuery(document).ready(function($) { $('.cat-item').click(function(){ var num=$(this).attr("class").split(/cat-item-/)[1].split(/(\/|#|&).*$/)[0];//获取class中的cat ID //alert(num);//for test $.ajax({ url : ajaxUrl+ "?action=Ajaxcat&col="+num, type: 'get', beforeSend: function() { $('#content-post').hide(); $('#qs-area').empty(); $('#qkblock').show(); $('#qs-info').fadeIn(500); }, error: function(request) { alert(request.responseText); }, success : function (data) { $('#qs-info').hide(); $('html,body').animate({ scrollTop: 200 }, 1000); $("#qs-area").html(data).slideDown('slow'); } }); return false; }); });
基本原理就是通过wp_list_categories('orderby=name&title_li=&style=list')输出列表,注意style=list这个参数将会产生cat-item-X这样的class,用jQuery获取这个值就找到了分类列表的ID,直接ajax传入就好了。
嗯,现在这个主题用的是固定的ID号,效果是一样的。有个缺陷是不能分页,因此默认是全部显示,目前我只输出前面30篇最近的,这个可以在query_posts的showposts参数控制。最初这个效果是从jinwen的主题中看到的,他也写了一个简单的教程,但是每个分类都要创建一个相应的php文件。我第一次改进是把全部响应部分放在一起加以判断,节省了很多,正如目前这个主题用上的一样,现在上面的方面适用性更强。
最后说一句,直接copy是不行的~
没有点代码基础看这教程简直白看,比如说我……
@有点蓝 ,欢迎以后再来~
特意来测试评论分页ajax效果,原来和我一样有“卡”的现象,如你所说应该是重新加载引起的。
@zwwooooo ,firefox不要开firebug,chrome是不开的
你的读者国外都有啦,真是不简单
@学夫子
哪里哪里,略懂而已
@winy ,谦虚了...
这个方法应该能SEO吧。
@無為
不能,只是方便而已,要说用户体验~
@winy ,折腾了一下,没成功,根本就没有看懂,哎~~~
@無為 ,嗯,需要一点基础
@winy ,要是博主能写点试合新手的教程就好了,好多都只是一些核心代码,根本就不知道怎么去调用。
@無為 ,虽然这已经算是属于比较高阶的东西了,但确实是全部代码了,只是自己要动手改改一些参数,我写了一些注释了。
简单的教程网上有很多。。。重复也没啥意思啊。最少应该知道JQuery和PHP的一些东西,不然看不懂很正常,因为我这个不是一个对每个主题都适用的方法,需要自己修改模板
想当初我像你一样一点也摸不着头脑,后来就是自己慢慢试出来的。。
@winy ,从你的分类目录到无限翻页再到评论的那个翻页,俺一个都没成功
。俺还不信邪了,闪人去学习再来
不怎么看的懂
很好很强大,谢谢分享~
最开始是在JINWEN的主题里面觉得这个很炫的 一直不晓得怎么折腾。。
我也去试试看