tinymce php拓展,wordpress博客扩展tinymce富文本编辑器emoji插件

emoji效果演示

本文的核心是: tinymce富文本编辑器添加自定义按钮插入自定义内容,如emoji😂

使用iframe的好处是,不占据插件体积,可按模块加载网页,可线上动态更新(无需更新插件),可以使用vue等框架(不必写php和jquery代码)等

实现一键添加各种html效果,如各种其他编辑器,如新邦编辑器等微信特定效果,让图文视觉更丰富,操作更简单快速

93b5d517b2f9db4be49eae778c6f8d05.gif

plugins文件夹

在wordpress的plugins文件夹下新建用于编写插件的文件夹

D:\xampp\htdocs\wp\wp-content\plugins

本文是在本地搭建wordPress调试插件,使用的为xampp环境

参考文章:

fd9f391cbc60f2c601dab072854e5e49.png

index.php主文件

在插件的文件夹下,新建index.php文件,主要插件配置主文件

9de8cbb16c883fdab4a125b35e2c90cc.png

1.写入插件描述信息

以下内容为插件的描述信息,注释内容不可少,可修改

/**

* Plugin Name: demo

* Plugin URI: https://dsx2016.com

* Version: 1.0

* Author: 大师兄

* Author URI: https://www.dsx2016.com

* Description: emoji plugin

* License: GPL2

*/

?>

2.启用插件

此时在wordpress插件目录可以看到新建的插件~demo,点击启用

ccb870abecb9e4c9cf4cb9b92b45e0e9.png

3.实例化tinymce插件

index.php内容更新为以下内容,详见注释

统一时间同级目录新建一个js文件:tinymce-custom-link-class.js,因为插件有用到

/**

* Plugin Name: demo

* Plugin URI: https://dsx2016.com

* Version: 1.0

* Author: 大师兄

* Author URI: https://www.dsx2016.com

* Description: emoji plugin

* License: GPL2

*/

// 构建类

class TinyMCE_Custom_Link_Class {

// 初始化时实例化编辑器

function __construct() {

// 如果在管理控制台

if ( is_admin() ) {

// 初始化插件

add_action( "init", array( $this, "setup_tinymce_plugin" ) );

}

}

// 添加按钮

function add_tinymce_toolbar_button( $buttons ) {

array_push( $buttons, "|", "custom_link_class" );

return $buttons;

}

// 导入编辑按钮的插件内容

function add_tinymce_plugin( $plugin_array ) {

$plugin_array["custom_link_class"] = plugin_dir_url( __FILE__ ) . "tinymce-custom-link-class.js";

return $plugin_array;

}

// 实例化方法

function setup_tinymce_plugin() {

// 如果不是编辑页面则return

if ( ! current_user_can( "edit_posts" ) && ! current_user_can( "edit_pages" ) ) {

return;

}

// 如果不是富文本编辑状态则return

if ( get_user_option( "rich_editing" ) !== "true" ) {

return;

}

// 注册富文本编辑器内容

add_filter( "mce_external_plugins", array( &$this, "add_tinymce_plugin" ) );

// 把注册的内容以按钮形式添加到编辑栏

add_filter( "mce_buttons", array( &$this, "add_tinymce_toolbar_button" ) );

}

}

// 实例化一个插件

$tinymce_custom_link_class = new TinyMCE_Custom_Link_Class;

?>

4.插件引用的js文件

tinymce-custom-link-class.js

此时仍然看不到插件效果,需要继续扩展内容

注意括号中的$,是jquery变量,js文件中可直接使用jquery

(function ($) {

})(jQuery);

5.创建按钮

先弄个icon文件放入文件夹,名称随意,待会会用到

502f8b4f52e64f6ba57abffdd1687516.png

写入编辑器插件实例化方法和添加按钮方法

(function ($) {

// 调用插件方法

tinymce.PluginManager.add("custom_link_class", function (editor, url) {

// 添加按钮

editor.addButton("custom_link_class", {

title: "emoji",

cmd: "custom_link_class",

image: url + "/emoji.png",

tooltip: "emoji"

});

});

})(jQuery);

此时查看编辑器区域,多了一个图标,就是刚刚添加的图像

90f89ae6d959dcd935f63315352521c8.png

6.根据图标名称定为按钮区域

打开chrome开发者工具,如图找到新加的编辑器图标DOM

其className为mce-ico

其backgroundImage的url地址含有emoji.png字符串(也就是图标的文件名)

a9f4c9c1d029358548dfad029866d39c.png

7.设置ifarme

见代码child.html

4d042fdadd16ff52467c5acc799ccc1a.png

此处需要开启本地http服务,方便加载网页

emoji

body {

margin: 0;

}

// 定义iframe向父网页发送消息

function sendEmoji() {

// 获取emoji的dom

let emoji = document.getElementById(`emoji`);

//给父页面发送消息,data为对象

parent.postMessage({ msg: emoji.innerHTML }, "*");

}

😂

8.设置iframe的css

预期是把图标浮窗放在按钮右上角

所以需要指定大小,边框,圆角,以按钮为相对定位

该css动态作用于emoji插件

6687ce461dc3a26665a24a63465bea51.png

同样放在插件目录,和iframe的html文件没关系,从父级窗口覆盖样式

3e50050870f3b3a66632cc5e538465fe.png

/* emoji浮窗样式 */

.iframeEmoji{

width: 200px;

height: 200px;

box-sizing: border-box;

position: absolute;

top: -194px;

right: -212px;

z-index: 99999 !important;

padding:5px;

border-radius: 10px;

background-color: #fff;

}

/* 降低编辑器层级,避免挡住emoji浮窗 */

.wp-editor-expand #wp-content-editor-tools{

z-index:0;

}

9.插件引入iframe,写入emoji

引入iframe,动态加载css,收到子元素消息后,写入emoji到编辑器

详见注释

(function ($) {

// 调用插件方法

tinymce.PluginManager.add("custom_link_class", function (editor, url) {

// 添加按钮

editor.addButton("custom_link_class", {

title: "emoji",

cmd: "custom_link_class",

image: url + "/emoji.png",

tooltip: "emoji"

});

// 监听点击按钮事件

editor.addCommand("custom_link_class", function () {

// 定一个变量存emoji按钮dom

let emojiBtnDom = null

// 遍历类目

$(".mce-ico").each(function () {

// 匹配对应图标的dom,存下来

if ($(this).css("background-image").includes((`emoji.png`))) {

emojiBtnDom = $(this)

}

})

// 插入iframe

emojiBtnDom.append(`

src='http://192.168.125.117:8080/child.html'

class='iframeEmoji'

scrolling='no'>

`)

// 引入css样式,插入head

$("head").append(`

type='text/css'

rel='stylesheet'

href='${url}/emoji.css'

/>`)

//回调函数(wordpress接受通信)

function receiveMessageFromIframePage(event) {

// 把收到的消息(emoji)写入到编辑器

editor.execCommand("mceReplaceContent", false, `${event.data.msg}`);

}

//监听iframe子窗口message事件

window.addEventListener("message", receiveMessageFromIframePage, false);

});

});

})(jQuery);

Tips

类型

简码适用于动态js特效的交互组件(复杂型)

编辑器适用于静态的html+css内容(简单型)

由于从别的地方无法复制或者复制后放入编辑器会丢失样式

所以需要tinymce插件在可视化编辑区一键插入html

可以使用插件的形式完全打造一个wordpress编辑器(可视化模块)

好处

丰富图文视觉效果

自定义模板和动效

建议博客护城河(带有html的内容手动复制难度加大,爬虫爬取的部分内容如果没有对应的插件渲染,也会丢失部分样式)

0a34461ee72619d3fc7ef1aa7b3d6a88.png

END.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值