wordpress按分类归档方法

编辑: 日期:2010-08-24 分类:Wordpress教程 留言:暂无留言 2人推荐推荐一下
简介:Wordpress按分类归档方法实现 首先建立一个archives.php(和archive.php不同,名称也可以随意),存入themes目录下,如果需要和主题保持一式,粘贴page.php的代码到archives.php中,在开头添加如下代码: <?php /* Template Name: Archives */ ?> ...

Wordpress按分类归档方法实现

首先建立一个archives.php(和archive.php不同,名称也可以随意),存入themes目录下,如果需要和主题保持一式,粘贴page.php的代码到archives.php中,在开头添加如下代码:

<?php
/*
Template Name: Archives
*/
?>

然后到后台页面中选择添加新页面,输入名称,别名输成archives(可以自定义),模板中选择Archives,内容留空即可。关键是用存档代码替换掉archives.php中的the_content()函数。重点说这个。

昨天晚上等球的时候没事干,就进入PhpMyAdmin查看一下wordpress的数据库。发现分类信息存于wp_terms和 wp_term_taxonomy两个表中。那么可以通过查询数据库得到分类目录的ID,这样别的都好说了。

先说说按分类目录实现存档页面的方法。总体思路还是附上图。然后一步一步说。

1. 对wp_terms和 wp_term_taxonomy两表进行数据库查询,我想得到的安段有term_id(分类目录或者标签的ID),name(分类目录或者标签的标 题),count(每个分类目录或者标签下文章的数量),而查询的条件是按wp_term_taxonomy表中的taxonomy字段值。

sql查询语句如下:

SELECT w.term_id,w.name,wt.count
FROM wp_terms AS w, wp_term_taxonomy AS wt
WHERE wt.taxonomy='category' AND wt.term_id=w.term_id AND w.term_id>1

其中w.ter_id>1是因为“未分类”的ID为1,而我不想显示这个分类,如果你删除了这个分类目录,那么可以取消这个查询条件。
得到的结果如下:

上面是在PhpMyAdmin中查询后的结果,在wordpress中调用wpdb类的实现代码:

点击展开PHP CODE
<?php
global $wpdb;
$sql = "SELECT w.term_id,w.name,wt.count FROM $wpdb->terms AS w, $wpdb->term_taxonomy AS wt WHERE wt.taxonomy='category' AND wt.term_id=w.term_id AND w.term_id>1";//如上的sql查询
$cat=$wpdb->get_results($sql);//默认以对象形式返回结果。
?>

数据库的查询完成。

2. $cat是查询后返回的结果,对其进行进行遍历。

<?php
foreach ($cat as $term) :
	$id=$term->term_id;
	$name=$term->name;
	$count=$term->count;
   //...插入查询文章列表代码
?>
<?php endforeach; ?>

3. 得到三个变量后,在上面相应位置插入文章列表遍历代码。

点击展开PHP CODE
 
<h3><?php echo $name."(".$count.")"; ?></h3> <!--分类目录标题及文章数-->
<?php
global $post;
$myposts = get_posts('numberposts=-1&category='.$id); //按条件查询文章
foreach($myposts as $post) :

    $comm_count=$post->comment_count; ?><!--得到评论数-->
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); echo " (".$comm_count.")"; ?></a></li>//打印文章列表
    <?php endforeach; ?>

关于get_posts()函数可以查询codex,我只说说这里的参数:numberposts是返回文章数,-1表示不限制;category表示显示某一分类目录ID的文章。
再加点html,总的代码如下:

<div>
<?php
global $wpdb;
$sql = "SELECT w.term_id,w.name,wt.count FROM $wpdb->terms AS w, $wpdb->term_taxonomy AS wt WHERE wt.taxonomy='category' AND wt.term_id=w.term_id AND w.term_id>1";
$cat=$wpdb->get_results($sql);
foreach ($cat as $term) :? >
<?php
	$id=$term->term_id;
	$name=$term->name;
	$count=$term->count; ?>
        <h5><?php echo $name."(".$count.")"; ?></h5>
        <ul> <!--以列表方式输出文章-->
        <?php
           global $post;
           $myposts = get_posts('numberposts=-1&category='.$id);
                foreach($myposts as $post) : ?>
		<?php $comm_count=$post->comment_count;?>
                <li><a href="<?php the_permalink(); ?>"><?php the_title(); echo " (".$comm_count.")"; ?></a></li>
        <?php endforeach; ?>
        </ul>
<?php endforeach; ?>
<!--此处可以加入jQuery代码-->
</div>

将以上代码替换the_content()。

4. 然后设置一下CSS,使其与主题更和谐~(发现现在有点烦CSS,麻烦球的。)

5. 比较整洁的方式是只显示标题,当读者感兴趣的时候点击标题,显示相应文章列表。用jQuery实现。(其实开始我想过用wp_list_category()获取分类目录及链接,然后jQuery调用Ajax来实现以上的效果,想想原理挺简单,不过实现其来似乎颇废时间,改天有激情的时候尝试一下

<script type="text/javascript">
	jQuery(function($){
		$('.archive ul').hide();
		$('.archive h5').toggle(
		function(){
			$(this).next('ul').slideDown();//滑动效果
		},
		function(){
			$(this).next('ul').slideUp();
		});
	});
</script>

最好不要直接在CSS中写成display:none;用jQuery脚本实现隐藏,是为了有些浏览器禁止或js加载不正常时仍能将文章列出。

按照前面的流程表实现了wordpress按分类目录归类的存档页面,并且加入了jQuery效果。总体效果是满意的,但是还存在以下已知或可能出现的问题:

  • 对“未分类”目录的处理,如果有些文章是“未分类”的,那么按这个程序是不会显示,可以加入一个用count字段的判断来实现。
  • 对多级分类目录的处理,我的站点中目前没有多级分类目录,所以也没有研究,有机会再解决。
  • 对标签的处理,改变sql语句中的WHERE为以下代码,而且标签一般比较多,改变一下html显示即可(我的过几天弄上)
  • sql的优化,当数据库越来越大之后,sql的优化有利于提高查询速度。
WHERE wt.taxonomy='post_tag' AND wt.term_id=w.term_id

原文

本文链接:wordpress按分类归档方法

版权所有:维普设计 - 转载请注明出处

客户留言 设置头像 0条
4068

 
主题定制 在线客服