新写了一个插件,wp_list_posts,主要用于生成存档文章清单。写这个插件的初衷,是因为升级到2.3后,发现一直在用的dd-sitemap-gen无法使用,提示错误,虽然我已经将它升级到兼容2.3的最新版了,但还是出错。虽然后来找到问题原因,自己的数据表前缀不是默认的wp_,当然主要原因在于dd-sitemap-gen中有一段代码没中的wp_没有被用$wpdb->替代,导致前缀非wp_的用户出现问题。再则发现该插件在生成存档清单时,严重消耗数据库查询,基本查询次数是和存档数目是,如果站点上有300个存档,那么它需要动用大于300次的数据库查询。原因在于,该插件调用了get_permalink()来生成存档的链接,而每调用一次get_permalink()都会产生一次数据查询。 

因为站点上的存档数目还不是很多,仅200多,可以将它们全部列在一个页面中,暂时还没必要使用分页功能。基于此,萌发了自己写一个显示存档文章的插件的念头。在写的过程中,又不断新增功能。如显示指定标签的文章等。站点上的几个专题页面,全部是由该插件自动生成的。如,我的wordpress插件专题X01HT使用技巧类专题等。

用途 

用途好多啊。嘿嘿,认真阅读下。当然,主要用于显示指定存档,

1. 支持按目录显示存档。

2. 按时间显示存档,可按年,月,日来显示。且可指定时间格式。效果可见我站上的存档页面,是按月份(M Y)生成的。 

3. 显示含有指定tag(标签)的存档。支持多标签。可用于自动生成系列文章等。效果见本站内的几个专题页面。

4. 显示指定目录下的存档。

5. 显示同一目录下的存档。可用于同一目录下的相关文章显示。 

6. 支持自定义是否显示评论数或发布时间。

7.采用自建函数生成文章链接(永久链接)。大大减少数据库查询。目前还不支持含有目录名的永久链接格式。在今后的升级中再来解决这个问题。

8. 生成代码通过W3C XHTML1.0 Transitional验证。 

安装

将wp_list_posts.php上传到plugin目录,在后台插件页面激活即可。

适用WP2.3以上版本 

代码调用

用下面代码调用函数。默认将以月为单位生成全部存档清单。

wp_list_posts

 

参数说明

本插件,自带了很多参数,嘿嘿,是有必要说明下。laugh在调用时,各个参数之间用&隔开。

wp_list_posts(‘display=incategory&categoryname=wordpress’)

 

将显示名为wordpress的目录下的存档,默认为显示最新的10个。 

wp_list_posts(‘display=tag&tag=wordpress,plugin&show_date=true’)

 

将显示同时含有wordpress和plugin2个标签的存档,并且显示存档的发布时间。 

具体参数说明:

1.$display,最重要的一个参数,共有5个值,用于不同用途。

1.1.$display=’time’,将按指定的timeformat为单位来显示全部存档。timeformat的解释见下面。 

1.2.$display=’category’,按目录显示全部存档。

1.3.$display=’tag’,将显示含有指定tag的存档。支持多tag输入,当$display设置成tag时,必须输入tag=’tagname’,否则将报错。tag参数解释见下。

1.4.$display=’incategory’,显示指定目录下的文章。必须同时设定categoryname的值,categoryname参数解释见下。另外,可设定limit的值,默认值为10,即仅显示按时间降序排列的头10个存档。 

1.5.$display=’postincategory’,用于在单篇文章中显示同一目录下的文章。可设定limit的值,默认值为10,即仅显示按时间降序排列的头10个存档。

 

2.$categoryname,和$display=’incategory’同时使用。用于设定指定目录的名字。支持中文目录名。需注意,输入中文目录名的时候,使用本函数的模板文件必须保存为utf-8格式,非ansi格式。 

3.$dateformat,用于指定发布时间的显示格式,支持php默认时间格式。默认为$dateformat=’Y.m.d’。即显示2007.11.20。点此查看更多php的时间格式

4.$limit,用于指定显示存档的数目,注意将在display设定为incategory或postincategory时方起作用,默认值为10。

5.$orderby,设定存档的排序方法,只能设置为DESC或ASC,设置其它值会报错。默认是降序’DESC’。 

6.$separateby,设定发布时间和存档标题之间的隔离代码,默认为’ | ’,即空一格,然后一个竖杠和空格。

7.$show_comment_count,布尔值。指定是否显示评论数目,默认为false,关闭,设定为true后,将在标题后显示:(评论数目)。

8.$show_date,布尔值。指定是否显示发布时间。默认为false,关闭,设定为true后,将在标题后显示发布时间。配合$dataformat,用于设定时间格式。 

9.$tag,指定tag的名称,多tag之间用半角逗号’,'隔开,如tag=’wordpress,plugin,hacks’。

10.$timeformat,配合$display=’time’,用于指定时间单位,支持php默认时间格式。默认为$timeformat=’M.Y’。即显示Nov.2007,按月为单位,如$timeformat=’Y',则按年为单位显示存档。点此查看更多php的时间格式

html代码以及CSS 

本插件生成的代码通过W3C XHTML 1.0 Transitional验证。

基本上生成的是<ul class=”wp_list_posts_(display的值)”><li></li></ul>这样的嵌套代码。如,当display为”postincategory”时的代码为:

<ul class=”wp_list_posts_postincategory”><li></li></ul> 

 

当display为time或category时,生成的时间名称和目录名称用<h3>包围。

当display为tag,即显示含有指定tag的存档时,默认第一个<li></li>的内容是: 

最后更新于:最新存档的发布日期。

 

如果您想修改这句话内容,请用文本编辑器打开Lang\zh_CN.php,找到$Lang['LastUpdated'],然后修改2个单引号之间的内容 

请网友根据class来自行定义css内容。至于css方面,我是不大熟,或者说是很烂。基本上靠碰运气来解决排版。shy

插件下载

Download wp_list_posts.zip
zip- File
21. Nov 2007 (500Hits)

拟解决问题

本是想将插件的问题解决后,再发布的,但是在论坛上已经答应了网友。所以还是先发布出来,存在的一些问题,等过些日子慢慢来解决。

1.对于显示含有指定tag的存档处理上的代码不够理想。 

2.尚不支持生成基于category的永久链接。

最后,插一句话,使用该插件的时候,多测试下这些参数,因为种类比较多。laugh

再则,有什么bug或建议,欢迎在此留言。发布此插件后,要全身心投入一篇会议论文的写作了。估计Blog也会暂时歇一歇了。WP论坛我还是会照来的。 

写这个插件的同时,也趁机会了解了下WP的数据结构。本来打算写一个系列文章,剖析WP数据库,来专门介绍下心得,而且将数据库的结构图也画好了,但看来也得拖后。也得等正事完成之后再说吧。

Feed Me


转载文章请注明转载自:ThinkAgain - Let's Blog!

引用地址:http://www.thinkagain.cn/archives/877.html