WordPress的默认编辑器是TinyMCE,TinyMce本身是款很强大的编辑器,只是WP中并没有开启它的全部功能。这不是坏事,并不是所有功能都是你需要的,你需要的可能也不在其中。学会如何开启高级功能,如何添加自定义按钮就够了。
开启高级功能很简单,装一些现成的插件,例如TinyMCE Advanced,本文主要介绍如何添加一些自定义按钮。
目录
如何突出显示内容
在编辑文章时,有时候想让一部分内容突出显示,例如这部分是代码,或者这部分是引用,或者只是单纯的想搞个与众不同的样式。
用HTML,我们通常是这么实现的
<div class="div_style1">需要突出的内容 需要突出的内容 需要突出的内容</div> <div class="div_style1">需要突出的内容 需要突出的内容 需要突出的内容</div> <div class="div_style1">需要突出的内容 需要突出的内容 需要突出的内容</div>
在主题的style.css中为定义div_style1这个样式,例如这样
.div_style1 {
background:#FFFFCC;
border:1px solid #CCCCCC;
color:#666666;
font-family: Georgia, "Times New Roman", Times, serif;
font-size:14px;
padding:5px 10px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
}
产生的样式如下图所示

你可以手动在编辑器中输入这段div结构,很不方便对不对。那么就把这段div代码定义为一个shortcode,当在编辑器输入
[mydiv]…[/mydiv]
被mydiv标签包围的部分就会被自动替换成<div class="div_style1">…</div>,如下图所示

如何为TinyMCE添加自定义按钮
现在,我们要把“插入shortcode [mydiv]…[/mydiv]”的功能做成一个TinyMCE按钮,用鼠标选择要突出的内容,点击这个按钮,就能使内容自动被[mydiv]标签包围。步骤如下:
Step 1. 通过钩子函数添加我们的自定义功能
打开主题的functions.php文件,添加如下代码
//Hook into WordPress
add_action('admin_init', 'mydiv_button');将自定义函数mydiv_button勾到admin_init这个钩子上,当用户访问管理员界面时,我们的自定义函数就会执行。
admin_init is triggered before any other hook when a user access the admin area
Step 2. 编写初始化函数mydiv_button
function mydiv_button() {
if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') ) {
return;
}
if ( get_user_option('rich_editing') == 'true' ) {
add_filter( 'mce_external_plugins', 'add_plugin' );
add_filter( 'mce_buttons', 'register_button' );
}
}这段函数的大体意思如下:
- 检测用户是否有编辑posts或者page的权限,如果没有,停止执行,返回
- 将我们的自定义函数挂载到两个钩子函数上(mce_external_plugins和mce_buttons),这两个钩子是WordPress为TinyMCE初始化增加的,第一个钩子在TinyMCE加载插件时执行,第二个在编辑器按钮被加载之前执行。
If “get_user_option(‘rich_editing’)” 为 true, 这个条件使得按钮只在所见即所得模式下显示。
Step 3. 注册按钮 Register Button
function register_button( $buttons ) {
array_push( $buttons, "|", "mydiv" );
return $buttons;
}向按钮数组中添加新的按钮,可以用“|”将按钮划分到一个新组中
Step 4. 注册TinyMCE Plugin
function add_plugin( $plugin_array ) {
$plugin_array['mydiv'] = get_bloginfo( 'template_url' ) . '/myeditor/mybuttons.js';
return $plugin_array;
}将按钮插件的代码映射到主题目录/myeditor/mybuttons.js文件中,该文件的代码如下所示
(function() {
tinymce.create('tinymce.plugins.mydiv', {
init : function(ed, url) {
ed.addButton('mydiv', {
title : 'My Div',
image : url+'/mydiv.png',
onclick : function() {
ed.selection.setContent('[mydiv]' + ed.selection.getContent() + '[/mydiv]');
}
});
},
createControl : function(n, cm) {
return null;
},
});
tinymce.PluginManager.add('mydiv', tinymce.plugins.mydiv);
})();- 代码首先调用create函数创建一个新的TinyMCE Plugin,调用插件的名字和初始化函数
- 在init函数中,ed指向编辑器的实例,url指向插件的地址,这里指向的是mybotton.js文件的地址
- 通过onclick事件绑定按钮的响应时间,并通过setContent和getContent方法创建我们需要的格式
- 最后,将我们的自定义插件添加到TinyMCE的Plugin Manager中,注意使用的名字,如果名字错误将导致按钮无法加载
image参数指定按钮的图片,该图片要放在与mybuttons.js相同的目录下,这里就是在myeditor文件夹下
Step 5.定义shortcode
//the shortcode
add_shortcode("mydiv","my_div");
function my_div( $atts, $content=null ) {
return '<div class="div_style1">'.$content.'</div>';
}这段代码只是简单的返回我们需要的结构,你可以做更复杂的处理。
Step 6.定义CSS Class
将文章开头的css代码拷贝到主题的style.css文件中,就大功告成了。在文章中编写内容,然后点击按钮,就可以加入shortcode,产生突出显示的效果。

选择按钮图标
很多网站提供png图标下载,例如
选择一款自己喜欢的图标,添加到TinyMCE中吧。
Step 5.定义shortcode中应该是
add_shortcode("mydiv","my_div");吧很好。如果博主能够提供源码就更好了
博主,我发现一个错误。
第二步中:
Step 2. 编写初始化函数mydiv_button
初始化函数 是不是写错呢?应该是
function mydiv_button()
多谢你留言,让我又发现了一篇因代码高亮插件而悲剧了的文章,你说的对,我确实写错了,文章我更新了一下,这篇文章很久之前写的,那时候不明白更换代码高亮插件可以毁掉文章里的代码,现在写大段代码都尽量提供一个php文件下载。
如果你有兴趣可以看下我另一篇关于定制tinyMCE的文章
https://solablog.top/how-to-customize-wp-tinymce.html
这个可以有,不过博客刚开始,还没想要弄什么样式~
博客都是慢慢折腾,今天看着不顺眼的明天搞不好就顺眼了,哈哈
这个木有折腾过~~