WordPress 3.9+的 TinyMCE 4 编辑器增强开发
从WordPress 3.9版本后,WordPress 默认的编辑器 TinyMCE 随之升级到了版本4,带来的问题以前在默认编辑器上的增强开发的效果可能失效。这篇文章旨在破旧立新,通过几个例子给大家带来几个TinyMCE4 编辑器的增强开发技巧。
还原字体种类及大小选择按钮
默认的话,字体种类及大小这两个按钮没有添加到TinyMCE 编辑器中,通过下面的函数,就可以实现有下拉形式的字体种类及大小这两个按钮。
// Enable font size & font family selects in the editor if ( ! function_exists( 'wpex_mce_buttons' ) ) { function wpex_mce_buttons( $buttons ) { array_unshift( $buttons, 'fontselect' ); // Add Font Select array_unshift( $buttons, 'fontsizeselect' ); // Add Font Size Select return $buttons; } } add_filter( 'mce_buttons_2', 'wpex_mce_buttons' ); |
---|
自定义字体大小
默认的话字体的大小单位是pt,但我们可能更需要的的px,而通过下面的函数,就可以实现:
// Customize mce editor font sizes if ( ! function_exists( 'wpex_mce_text_sizes' ) ) { function wpex_mce_text_sizes( $initArray ){ $initArray['fontsize_formats'] = "9px 10px 12px 13px 14px 16px 18px 21px 24px 28px 32px 36px"; return $initArray; } } add_filter( 'tiny_mce_before_init', 'wpex_mce_text_sizes' ); |
---|
自定义字体
除了默认的字体,根据个人需求你可能需要添加其他字体,比如说Google font(不过在天朝嘛目前貌似有点难连接这个)上的字体,那么你可以用下面的代码注册一个自定义字体。
// Add Google Scripts for use with the editor if ( ! function_exists( 'wpex_mce_google_fonts_styles' ) ) { function wpex_mce_google_fonts_styles() { $font_url = 'http://fonts.googleapis.com/css?family=Lato:300,400,700'; add_editor_style( str_replace( ',', '%2C', $font_url ) ); } } add_action( 'init', 'wpex_mce_google_fonts_styles' ); |
---|
增加编辑器的下拉菜单功能
先看图,就知道实现的效果是什么了,这个的话在 Devework主题的1.5 版本之后的短代码功能上按照这个增加了可视化状态下的输入按钮。
如何实现的呢?
下面直接献上本站实现上图所示的效果的代码:
// 短代码可视化插入按钮 devework.com function my_add_mce_button() { if ( !current_user_can( 'edit_posts' ) && !current_user_can( 'edit_pages' ) ) { return; } if ( 'true' == get_user_option( 'rich_editing' ) ) { add_filter( 'mce_external_plugins', 'my_add_tinymce_plugin' ); add_filter( 'mce_buttons', 'my_register_mce_button' ); } } add_action('admin_head', 'my_add_mce_button'); function my_add_tinymce_plugin( $plugin_array ) { $plugin_array['my_mce_button'] = get_template_directory_uri() .'/lib/js/mce-button.js'; return $plugin_array; } function my_register_mce_button( $buttons ) { array_push( $buttons, 'my_mce_button' ); return $buttons; } |
---|
其中mce-button.js 的代码如下:
(function() { tinymce.PluginManager.add('my_mce_button', function( editor, url ) { editor.addButton( 'my_mce_button', { text: '短代码', icon: false, type: 'menubutton', menu: [ { text: 'box', menu: [ { text: 'box-alert', onclick: function() { editor.insertContent('[box style="alert"][/box]n'); } }, { text: 'box-warning', onclick: function() { editor.insertContent('[box style="warning"][/box]n'); } }, { text: 'box-download', onclick: function() { editor.insertContent('[box style="download"][/box]n'); } }, { text: 'box-info', onclick: function() { editor.insertContent('[box style="info"][/box]n'); } } ] }, { text: 'mp3', onclick: function() { editor.insertContent('[mp3][/mp3]n'); } }, { text: 'music', onclick: function() { editor.insertContent('[music][/music]n'); } }, { text: 'flv', onclick: function() { editor.insertContent('[flv][/flv]n'); } } ] }); }); })(); |
---|
增加编辑器的弹出窗口功能
直接上图见效果:
js的代码如下:
(function() { tinymce.PluginManager.add('my_mce_button', function( editor, url ) { editor.addButton( 'my_mce_button', { text: 'Sample Dropdown', icon: false, type: 'menubutton', menu: [ { text: 'Item 1', menu: [ { text: 'Pop-Up', onclick: function() { editor.windowManager.open( { title: 'Insert Random Shortcode', body: [ { type: 'textbox', name: 'textboxName', label: 'Text Box', value: '30' }, { type: 'textbox', name: 'multilineName', label: 'Multiline Text Box', value: 'You can say a lot of stuff in here', multiline: true, minWidth: 300, minHeight: 100 }, { type: 'listbox', name: 'listboxName', label: 'List Box', 'values': [ {text: 'Option 1', value: '1'}, {text: 'Option 2', value: '2'}, {text: 'Option 3', value: '3'} ] } ], onsubmit: function( e ) { editor.insertContent( '[random_shortcode textbox="' + e.data.textboxName + '" multiline="' + e.data.multilineName + '" listbox="' + e.data.listboxName + '"]'); } }); } } ] } ] }); }); })(); |
---|
后记:
本文来源于http://www.wpexplorer.com/wordpress-tinymce-tweaks/ ,但非完全翻译,只取部分仅作抛砖引玉而已,要完整理解前前后后的原理还需要看原文。
- RESTful API 设计指南
- 洛谷P1043 数字游戏
- 使用“空”对象替代引用是否为空判断
- 真是绝了!史上最详细的Jupyter Notebook入门教程
- 10.socket网络编程
- BZOJ1269: [AHOI2006]文本编辑器editor
- 开发人员为何需要企业服务总线?
- 搭建Visual Studio Code+Python开发环境1.对象简介2. 搭建步骤3.小结
- 洛谷P3835 【模板】可持久化平衡树
- 17.HTML
- 洛谷P2925 [USACO08DEC]干草出售Hay For Sale
- Numpy 修炼之道 (13)—— 将python函数向量化
- 洛谷P1887 乘积最大3
- 18.CSS
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Thread源码解析
- ThreadPoolExecutor源码学习
- 实习第三周
- ABAP和JavaScript的懒加载,单例和桥接模式的实现和比较
- ExecutorCompletionService源码学习
- Erlang和RabbitMQ的windows环境配置
- ScheduledThreadPoolExecutor源码学习
- Github创建您的私服
- SAP BSP应用有状态和无状态行为差异比较
- Executors源码学习
- Java注解学习
- 使用ES5,ES6和SAP ABAP实现非波拉契数列Fibonacci
- SpringBoot整合自定义注解
- nginx被动检测
- Python获取股票历史数据