微构网络

[思路+代码]WordPress实现根据多个自定义字段合并筛选数据

2015-07-30 21:52 栏目:技术教程 查看(5,206)

WordPress是一个全球知名的开源web程序,据了解全球有超过20%的站点都是基于这款程序建立的,在国内也是特别流行,一些大公司的团队博客等都是基于这个程序建立的。当然知道的也知道,WordPress是一款博客程序,因此在默认情况下并没有像那种庞大的CMS系统一样拥有丰富的、现成的功能。

那是不是WordPress就不适合来做某些CMS来做的事情了,肯定不是的!因为它提供了丰富的API,可以让我们根据自己的需求来构建无数功能模块。也是因为这样,我自己经常用它来完成一些小项目,因为在初始状态下它很简单,而要什么功能在基于它来开发,没有多余的东西。比如国内知名网站程序Discuz之类的,如果来做一个普通的企业网站那么就显得太多余了,太庞大了,Discuz数据库表就将近300张(含Ucenter);而WordPress只有11张表;但可以基于它扩展很多功能。

最近的一个项目,可以说不是普通常规的网站,但就各个模块来说又是常规的;最后我选定了用WordPress来做,当然事实上这并不是一个省时间的方式。但我这个人就喜欢寻乐子,喜欢瞧瞧未知的东西,包括这次就闯了几个之前没接触的。比如今天的主角——WordPress根据多个自定义字段合并筛选数据。

ddd

大家都知道根据多个字段合并筛选数据那是网站制作开发过程中最平常不过的功能了,很多人都会,比如一些商城什么的。就算是自己开发一个这样的功能模块也是非常简单的,是一个很常规的工作。基于一些CMS系统来说这样的功能根本不用做,因为现成的;而就算自己写一个这样的系统也是很简单的。但如果对WordPress不熟悉,要完成这个并不是一件太容易的事儿;因为前提是不能破坏它的结构,而且得根据他的架构思想来做。否则你可能功能写出来了,但效率很低下;除非你比这个原作者更熟悉这个结构、有更牛逼的数据库知识。

下面就进入正题,其实这个我们首先需要用到postmeta这张数据表,这个数据表有meta_idpost_idmeta_keymeta_value四个字段,其中meta_id为记录id,为自增;post_id为相应的文章ID(其实实际上包含文章、页面、附件等,因为这些都保存在post表中),而后两者分别为键名称和键值。如果单纯这张表,确实很简单,清晰明了;但就是这张表,就是给我们来扩充文章、附件、页面等功能的。

因此我们自然的可以联想到来应用它,如果你在考虑做这个事情,那么你很幸运,因为不需要你看英文文档(对于我这样的英语渣,最痛苦的就是看英文文档了),就可以在国内各个博客中发现一个非常使用的函数update_post_meta(),这个就是向其中插入数据的,使用起来很简单;相应的还有delete_post_meta()get_post_meta(),分别用于删除和获取数据的。关于这些相关的函数使用我有时间会跟大家分享下。

准备工作好了,现在我们已经可以为我们的内容创建自定义字段,并可以保存、读取、删除、更新等,也就是说我们的这个列表中的文章可以分别有了类别、材质、主题三个附加的字段,就类似标题字段一样的。那么我们需要做最后一个主体工程就是来合并筛选。据我对WordPress数据结构的了解,如果直接写自定义的SQL查询语句来写,那么显然是相对复杂而且很可能会效率很低。于是我就在想这个强大的程序是不是自己提供了,就联想到了WP_Query类之类的东西,结果翻看文档发现其中还真是有我需要的,当然此类内容在网上比较少,因为很少人折腾这玩意。下面就直接代码截图来给思路了,当然到这里了其实不用贴代码,对于懂的人也能知道怎么办了。

对于我们上图能看到的那一部分的选择区域代码就省略了,那一部分很简单,其实就是为了获取筛选的参数ID,用于我们输出数据时的约束条件而已。直接从输出约束(也就是我们要的多字段筛选)核心的部分来做处理。首先我们得判断我们用户是否选择了筛选条件,这里有三个属性条件,分别是类别、材质、主题;那么我们就一一获取吧(命名是随便的,有点儿不规范哈)。

etewt

然后我们就需要用到了我们上面所说的WP_Query类,我们我们我们得到的筛选条件传递到类当中,并实例化类获得一个我们查询的对象,然后在把对象里面的东西取出来输出就完成了。如下:

dddxx至此,我们就已经实现了我们最开始所需要的功能了(当然上面的合并条件的地方,你可以写入更多的条件,而且静态分类ID=24,实际应用可以改成动态,实际上用$cat就可以了,这里只是为了简单明了,直接写了一个静态值)。而且上面两张图已经贴出了很详细的核心部分的代码了,几乎直接抄着就可以用了,当然用户筛选界面就省略了。对于WP_Query类的详细介绍,以后有时间的时候跟大家分享下。

到了这里,如果熟悉了以上各个数据结构、内置方法及属性、类等等,那么做起来就非常简单了,比自己写一个孤立的同样的功能的模块还简单,省时省力,就像拿现成的CMS系统的这样的模块使用一样。因此,还是那句话,没有绝对的难或者容易,再简单的只要不会一样难,再复杂的只要会了一样很容易。

当然,不管大家是懂技术的还是不懂技术的,不管是用过WordPress的还是没有用过WordPress的,如果大家有这方面的服务需求,都可以联系咱们哦。

 

转载请注明出处:[思路+代码]WordPress实现根据多个自定义字段合并筛选数据 - 微构网络
分享:

您可能遇到的问题?

搜索微构网络的干货:

值班:15574303608 业务:在线咨询 技术:在线咨询

电话:0731-83862683 售后:在线咨询 邮箱:server@csweigou.com

地址:长沙市五一西路锦绣中环1116(五一广场平和堂对面)