十一/093
定制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的机制?
12:46 on 十一月 6th, 2009
jQuery:
$(‘form#post’).attr(‘enctype’,'multipart/form-data’);
上传功能能否与 WP 已有的 媒体库 功能结合,在媒体库的基础上做扩展。
01:51 on 十二月 2nd, 2009
复杂了点。
17:34 on 十二月 11th, 2009
wordpress本身设计的初衷就是一个个人blog,虽说可以通过丰富的API去扩展成一个CMS,但未免有些牵强。从库表结构就可以看出来,媒体文件当成了另外一个POST写入数据库的,加上晦涩的attachment相关函数,对开发者来说过于繁琐。