有国外的朋友发现了小站首页的免刷新分类目录(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','&nbsp;|&nbsp;',''); ?>
  </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是不行的~

  1. 有点蓝 (2010.09.11 at 15:32) 25楼

    没有点代码基础看这教程简直白看,比如说我……

  2. zwwooooo (2010.09.11 at 23:38) 26楼

    特意来测试评论分页ajax效果,原来和我一样有“卡”的现象,如你所说应该是重新加载引起的。

    • winy() (2010.09.11 at 23:53)

      @zwwooooo ,firefox不要开firebug,chrome是不开的

  3. 学夫子 (2010.09.12 at 09:02) 27楼

    你的读者国外都有啦,真是不简单

  4. 無為 (2010.09.12 at 14:46) 28楼

    这个方法应该能SEO吧。

    • winy() (2010.09.12 at 16:48)

      @無為
      不能,只是方便而已,要说用户体验~

    • 無為 (2010.09.17 at 23:20)

      @winy ,折腾了一下,没成功,根本就没有看懂,哎~~~

    • winy() (2010.09.17 at 23:27)

      @無為 ,嗯,需要一点基础

    • 無為 (2010.09.17 at 23:33)

      @winy ,要是博主能写点试合新手的教程就好了,好多都只是一些核心代码,根本就不知道怎么去调用。 :mad:

    • winy() (2010.09.17 at 23:39)

      @無為 ,虽然这已经算是属于比较高阶的东西了,但确实是全部代码了,只是自己要动手改改一些参数,我写了一些注释了。
      简单的教程网上有很多。。。重复也没啥意思啊。最少应该知道JQuery和PHP的一些东西,不然看不懂很正常,因为我这个不是一个对每个主题都适用的方法,需要自己修改模板
      想当初我像你一样一点也摸不着头脑,后来就是自己慢慢试出来的。。

    • 無為 (2010.09.18 at 15:30)

      @winy ,从你的分类目录到无限翻页再到评论的那个翻页,俺一个都没成功 :eek: 。俺还不信邪了,闪人去学习再来 :grin:

  5. moncler online (2010.09.26 at 16:28) 29楼

    不怎么看的懂

  6. loke (2010.10.04 at 13:10) 30楼

    很好很强大,谢谢分享~

  7. 球犯 (2010.10.24 at 19:35) 31楼

    最开始是在JINWEN的主题里面觉得这个很炫的 一直不晓得怎么折腾。。

  8. Minimalist Shoes (2011.05.16 at 16:21) 32楼

    我也去试试看

评论分页: 1 2 3 4

发布评论

邮箱(必填)

换个背景