想做的东西很简单,就是在wordpress编辑界面中做出方便的Tag生成按钮。具体点说就是,点击按钮,输入/选择Tag名称,编辑器就自动在HTML中加入对应名称的Tag。至于平台,现在还没想很多,首选当然是wordpress自带的TinyMCE编辑器。虽然很多人都觉得这款编辑器非常单薄,没有什么功能…但是嘛,作为一个成熟的编辑界面,功能绝对足够强大~并且扩展性非常棒~ 只是在wordpress集成的时候砍掉了很多有用的button。就算把功能放在一边,还有很重要的一点,XML标签格式的Tag本身在最终文档中并不是可见的(管理方面确实会有问题…不过等这个做完再考虑)。因此,像TinyMCE这样的WYSIWYG编辑器必然是我的目标。

然后,作为填充字数,贴一点对于“WYSIWYG”的介绍,From Wikipedia.

WYSIWYG is an acronym for What You See IWhat You Get. The term is used in computing to describe a system in which content (text and graphics) displayed onscreen during editing appears in a form closely corresponding to its appearance when printed or displayed as a finished product, which might be a printed document, web page, or slide presentation.

闲话不多说,开始最初步的配置。首先是解放TinyMCE的编辑菜单(只有一行按钮的话完全不够用嘛)。关于显示TinyMCE的隐藏功能~ 来源

<br /> function enable_more_buttons($buttons) {<br /> $buttons[] = 'code'; #HTML模式<br /> $buttons[] = 'hr'; #水平线<br /> $buttons[] = 'sub'; #下标<br /> $buttons[] = 'sup'; #上标<br /> $buttons[] = 'fontselect'; #字体选择<br /> $buttons[] = 'fontsizeselect';#字号选择<br /> $buttons[] = 'cleanup'; #清除冗余代码<br /> $buttons[] = 'styleselect'; #样式选择<br /> $buttons[] = 'wp_page'; #分页符<br /> $buttons[] = 'anchor'; #锚文本<br /> $buttons[] = 'backcolor'; #字体背景色<br /> return $buttons;<br /> }<br /> add_filter("mce_buttons_3", "enable_more_buttons");<br />

总共有多少可选项呢?这个可以参考官网。将上面代码添加进使用主题的functions.php中(最后一行就行)。至于效果,可以参考下面的图(转载):
效果

隐藏功能搞定之后,还有另外一个问题:编辑器会自动清除不符合XHTML 1.0标准的HTML标签…至于解决办法,也还是有的,就是加入例外。下面的代码在TinyMCE启动前修改启动选项,使得两个标签成为编辑器合法标签。当然,代码中标签后面的value名称定义也是很重要的,如果出现了定义中没有的名称,TinyMCE照样清除(但是留下标签)。 <br /> function fb_change_mce_options($initArray) {<br /> $ext = 'foo[id|name|class|style],bar[id1|id2]';<br /> if ( isset( $initArray['extended_valid_elements'] ) ) {<br /> $initArray['extended_valid_elements'] .= ',' . $ext;<br /> } else {<br /> $initArray['extended_valid_elements'] = $ext;<br /> }<br /> return $initArray;<br /> }<br /> add_filter('tiny_mce_before_init', 'fb_change_mce_options');<br /> 这样的话,这个问题也可以说是解决了。然而,对于我这样,希望定义一些自家用标签的人来说,这种修改还不是很彻底。干脆,把标签的声明全部改成通配符。

$ext = ‘*[*]’;

这样,不管是什么样的标签都畅行无阻了。