WordPress编辑器经过3.5的洗礼更加漂亮了,我喜欢直接在WordPress中编辑文章,如果能让编辑器非常适合自己,那就再好不过了。总结一下定制WordPress TinyMCE编辑器的方法,一切以WordPress 3.5为基准,我是个喜新厌旧的家伙,一有新版就马不停蹄的升级。
目录
WordPress 3.9的编辑器定制方法参考此文。
WordPress中编辑器相关的Filters
- mce_spellchecker_languages: 更改spell checker的语言.
- mce_buttons, mce_buttons_2, mce_buttons_3, mce_buttons_4: 更改TinyMCE编辑器的按钮
- mce_css: 编辑器样式表的文件路径
- mce_external_plugins: 编辑器插件
- mce_external_languages: 外部插件加载的语言文件,允许它们使用标准翻译方法
- tiny_mce_before_init: 可以更改所有的初始化选项
参考文章:How to extend the usability of TinyMCE in WordPress?
如何重排或添加按钮
使用filter增加按钮,按钮一共可以有四排,从第一排到第四排对应的钩子分别为:
- mce_buttons
- mce_buttons_2
- mce_buttons_3
- mce_buttons_4
例如,向第二排开头增加选择Font Family和Font Size的按钮
add_filter('mce_buttons_2', 'add_mce_buttons');
function add_mce_buttons( $buttons ){
array_unshift( $buttons,'fontselect','fontsizeselect' );
return $buttons;
}如果要添加到末尾,使用array_push()函数操作数组。
WordPress中可用的按钮名称(包括默认显示的和隐藏的)如下表所示
| 代码中使用的英文名称 | 中文对照 |
|---|---|
| 默认显示的按钮 | |
| bold | 粗体 |
| italic | 斜体 |
| underline | 下划线 |
| strikethrough | 删除线 |
| justifyleft | 左对齐 |
| justifycenter | 居中 |
| justifyright | 右对齐 |
| justifyfull | 两端对齐 |
| bullist | 无序列表(非序号式列表) |
| numlist | 有序列表(序号式列表) |
| outdent | 减小缩进量 |
| indent | 增加缩进量 |
| undo | 撤销 |
| redo | 重做 |
| link | 插入或编辑链接 |
| unlink | 取消链接 |
| wp_more | 插入“更多”分隔标签 |
| spellchecker | 切换拼写检查器状态 |
| fullscreen | 切换全屏模式 |
| wp_adv | 显示/隐藏高级功能 |
| formatselect | 选择格式 |
| forecolor | 选择文字颜色 |
| pastetext | 以纯文本粘贴 |
| pasteword | 从Word中粘贴 |
| removeformat | 去除格式 |
| charmap | 插入自定义字符 |
| wp_help | 帮助 |
| blockquote | 引用 |
| 隐藏的按钮 | |
| cut | 剪切 |
| copy | 复制 |
| paste | 粘贴 |
| image | 插入或编辑图像 |
| fontselect | 选择字体 |
| fontsizeselect | 选择字号 |
| styleselect | 选择样式 |
| sub | 下标 |
| sup | 上标 |
| backcolor | 选择背景色 |
| forecolorpicker | 选择文字颜色(拾色器) |
| backcolorpicker | 选择背景颜色(拾色器) |
| visualaid | 显示/隐藏指导线和不可见元素 |
| anchor | 插入或编辑锚 |
| newdocument | 新文档(清除当前内容) |
| cleanup | 清理无用代码 |
| code | 编辑HTML源码 |
| selectall | 全选 |
如何增加新的样式(Style Format)
自定义样式有很多用途,不同背景色、字体颜色、字号可以创建不同用途的样式,如果你需要频繁的使用某种样式,可以将其预定义到Style Format中。
Style Format按钮默认不在WordPress编辑器中显示,见上表,需要用第一节中介绍的方法调出来。
参考资料:
增加预定义样式
在主题的functions.php中加入如下代码,数组中每个元素都定义了一个样式,产生的结构见代码注释。
add_filter( 'tiny_mce_before_init', 'my_mce_before_init_insert_formats' );
function my_mce_before_init_insert_formats($init_array) {
// 定义 style_formats 数组
$style_formats = array(
// 数组每个元素是一个样式的定义,产生的结果如注释中所示
//<blockquote class="translation">content ...</blockquote>
array(
'title' => '.translation',
'block' => 'blockquote',
'classes' => 'translation',
'wrapper' => true,
),
//<span class=".warning">content ...</span>
array(
'title' => '.warning',
'inline' => 'span',
'classes' => 'warning'
),
//<span style="color:white; background: red;">content ...</span>
array(
'title' => '.attention',
'inline' => 'span',
'styles' => array('color' => 'white','background' => 'red')
),
//<h2 style="color:blue">content ...</h2>
array(
'title' => 'Blue Heading 2',
'block' => 'h2',
'styles' => array('color' => 'blue')
),
//选中链接应用该样式,添加rel="nofollow"和"class"="external",对普通文本无效,产生结果如下(例如:)
//<a class="external" href="https://solablog.top" rel="nofollow">链接文本</a>
array(
'title' => 'No follow Link',
'selector' => 'a',
'classes' => 'external',
'attributes' => array('rel' => 'nofollow')
)
);
// 用JSON ENCODE方法产生'style_formats'
$init_array['style_formats'] = json_encode($style_formats);
return $init_array;
}以上代码的实际效果

Style Formats 参数说明
| Name | Summary |
|---|---|
| inline | 要产生的内联元素名称,例如“span”。当前的文本会被内联元素包围。 |
| block | 要产生的块级元素名称,例如“h1”。被选中的块级元素会被新的块级元素替代。 |
| selector | 在选择的文本中匹配元素的CSS3选择符。可用于给指定的特殊元素应用样式,例如给表格中的奇数行应用样式。 |
| classes | 给选中元素或者新的内联/块级元素添加class,用逗号分隔多个class。 |
| styles | Name/Value值,用来给选中元素应用内联样式。 |
| attributes | Name/Value值,给选中元素或者新的内联/块级元素添加属性。 |
| exact | 禁用合并类似样式的功能。 |
| wrapper | 表示要应用的样式应作为块级元素的container出现,例如一个div或blockquote,这些元素可以包含块级元素。 |
如何更改Font Size预设
通过直接修改tinyMCE初始化设置来完成,代码如下
function customize_text_sizes($initArray){
$initArray['theme_advanced_font_sizes'] = "10px,11px,12px,13px,14px,15px,16px,17px,18px,19px,20px,21px,22px,23px,24px,25px,26px,27px,28px,29px,30px,32px,48px";
return $initArray;
}
add_filter('tiny_mce_before_init', 'customize_text_sizes');如何更改Font Family预设
方法与修改字号相同,可以合并。
function customize_font_family($initArray){
$initArray['theme_advanced_fonts'] = "Microsoft Yahei='Microsoft Yahei',arial,sans-serif;Arial=arial,helvetica,sans-serif;宋体='宋体'";
return $initArray;
}
add_filter('tiny_mce_before_init', 'customize_font_family');将字体样式分组,用分号分隔,每一组格式为
名称=font-family属性
例如
Microsoft Yahei='Microsoft Yahei',arial,sans-serif;
如何更改格式(Formats)预设
方法依然同上,可以合并。
function customize_formats($initArray){
$initArray['theme_advanced_blockformats'] = "p,pre,address,div,h1,h2,h3,h4,h5,h6,blockquote,dt,dd,code,samp";
return $initArray;
}
add_filter('tiny_mce_before_init', 'customize_formats');tiny_mce_before_init
tiny_mce_before_init filter中存储了tinyMCE的所有设定,其实前面所叙述的任务都可以用这个filter来完成,下面举例说明。
禁止某些按钮显示
例如禁止加粗和斜体按钮,除了button filter的方法,还可以这样
function customize_tinmyce($initArray){
$initArray['theme_advanced_disable'] = "bold,italic";
return $initArray;
}
add_filter('tiny_mce_before_init', 'customize_tinmyce');注:下面的代码只写$initArray的配置,function和filter都是相同的。
更改点击“选择文字颜色”按钮后出现的颜色列表
$initArray['theme_advanced_text_colors'] = "FF00FF,FFFF00,000000";

设置“选择文字颜色”按钮的默认颜色
$initArray['theme_advanced_default_foreground_color'] = '#FF00FF';
tinyMCE的高级主题选项还有很多,大多可以用这种方式在WordPress中使用。有兴趣的朋友可以看一下TinyMCE – Advanced Theme
添加TinyMCE插件
这里指针对tinyMCE的插件,而非WordPress插件。
例如增加一个searchreplace(查找/替换)插件,下载tinyMCE的完整软件包,在plugins目录下会找到searchreplace目录,这个就是searchreplace插件的文件
1. 拷贝到主题的js目录下,目录结构如下
wp-content/themes/twentytwelve/js/searchreplace
2. 打开searchreplace目录下的searchreplace.htm,需要替换一些核心文件的路径
将
<script type="text/javascript" src="../../tiny_mce_popup.js"></script> <script type="text/javascript" src="../../utils/mctabs.js"></script> <script type="text/javascript" src="../../utils/form_utils.js"></script>
替换成
<script type="text/javascript" src="../../../../../wp-includes/js/tinymce/tiny_mce_popup.js"></script> <script type="text/javascript" src="../../../../../wp-includes/js/tinymce/utils/mctabs.js"></script> <script type="text/javascript" src="../../../../../wp-includes/js/tinymce/utils/form_utils.js"></script>
3. 在functions.php中引入外部插件,添加编辑器按钮
add_filter('mce_external_plugins', 'load_tinymce_external_plugins' );
function load_tinymce_external_plugins( $plugins ) {
$plugins ['searchreplace'] = get_template_directory_uri().'/js/searchreplace/editor_plugin.js';
return $plugins;
}
add_filter('mce_buttons_2', 'add_mce_buttons_2');
function add_mce_buttons_2( $buttons ){
array_unshift( $buttons,'search','replace');
return $buttons;
}结果如下图所示

还有一个添加表情按钮的例子,参考文章如何为WordPress默认编辑器添加表情图标。
我想点击pre的时候,在增加出来的标签上添加上样式。
原来是<pre>..</ pre>
我想要<pre class=”xxxxx”>…</ pre>
不知道有办法么?