5
十一/09
3

定制wordpress的文章发布

wordpress在发布文章的时候,已经集成了很多特性,比如tinyMCE这个可视化编辑器,文章标签(tags),别名(alias),以及分类(taxonomy)。但对于一个基于wordpress的项目,我们仍然需要对其高度定制,wordpress为我们提供了add_meta_box,来优雅的解决这个问题。

用起来比较简单,就6个参数,其中第三个参数为callback。我们可以在这个callback中设置一些输出信息,或者一个表单,最常用的还是后者。比如我们设置一个textarea的文本区域,用来保存一些用户输入的信息,这样用户发布这个post或者page的时候,这个信息就会保存到postmeta表里。其次,我们可以使用get_post_meta来获取这个数据。说到这里,有必要简单提下wordpress的表结构。

不像drupal那么复杂,wordpress主要的内容信息其实就两个表,一个post表,一个postmeta表,前者存放用户发布的基本内容,比如一篇blog,后者存放这个内容的一些附加信息,比如我们刚才定制的那个textarea。

最后,这里说下我碰到的一个问题以及自己的解决办法。在使用add_meta_box的时候,我们只是给post这个表单加入了一些输入控件,如果要处理文件的上传,或者使用curl等库来处理更高级的http操作,就出现问题了。因为form这个表单本身在wordpress中就定义好了,我们知道如果上传文件,form表单必须设置enctype = “multipart/form-data”属性,但默认的是没有的。google大叔告诉我很多人直接修改了wordpress的core,但我觉得这不是一个好的处理方式,我的解决办法是加入一段javascript来动态修改。
window.onload = function() {
var form = document.getElementById(”post”);
form.enctype = “multipart/form-data”;
};
这段javascript可以替换为更好的jquery代码,因为jquery等很多javascript类库已经集成到wordpress里面。目前能想到的就是这种方式,或许我还不够了解wordpress的机制?

关键字:
2
十一/09
0

初涉wordpress开发

近期涉及到wordpress-MU版本的开发工作,因为用户对其插件buddypress比较感兴趣。看了两天的文档,感慨wordpress文档的匮乏。。。

除了少的可怜的官方文档,基于codex系统,很多页面都没有书写外,自己down了一份plugin development的pdf,看完这个pdf才有点插件开发的感觉。写了4-5个小插件,熟悉了下wordpress的hook(wp中称作action和filter)。感觉还是不如drupal的模块优雅和灵活,但定制一个系统还是比较简单的,最大的痛苦就是wordpress的api函数太多,而很多都没有文档,不知道该如何选择,看了很多sample,用的还都不一样,版本之间留有差异性,不像drupal,5.x和6.x之间分别保持统一。

目前看来,一个buddypress新建一个用户,数据库中会多出8个表,这个恐怖的事实在网上已经有商业插件解决,不知道这个项目到底是怎么回事?
另外,视频方面采用了vimeo,开发和调试阶段颇为麻烦,因为国内的防火墙墙掉了很多应用,vimeo也不例外,使用vpn虽然解决了这个问题,但文档和wordpress一样少的可怜。

经过5天的google和编码,还算有点收获,过几天不忙了整理点文档共享给wordpress的插件开发者们。感慨:好的开源项目,如果文档不完善,依然是一件痛苦的事情。

关键字: