WordPress编辑器添加可视化按钮

    当我们在为WordPress扩展更多功能时,过程简单化我觉得是必不可少的,就如本站的订阅下载功能而言,每次需要插入附件时,都需要手动输入[sdfile url=""],或者是切换到文本编辑。而添加可视化按钮可以快速解决这个问题。

    Wordpress编辑器添加可视化按钮

    首先在functions.php中添加

    /**
    功能说明: 编辑器添加按钮
    更新时间:2017-10-06
    **/
    function lb_tinymce_button() {
    	if ( current_user_can( 'edit_posts' ) && current_user_can( 'edit_pages' ) ) {
    		add_filter( 'mce_buttons', 'lb_register_tinymce_button' );
    		add_filter( 'mce_external_plugins', 'lb_tinymce_button_script' );
    	}
    }
    add_action( 'admin_init', 'lb_tinymce_button' );
    function lb_register_tinymce_button( $buttons ) {
    	array_push( $buttons, 'down_button' );
    	return $buttons;
    }
    function lb_tinymce_button_script( $plugin_array ) {
    	$plugin_array['lb_button_script'] = get_template_directory_uri(). '/app/button.js'; 
    	return $plugin_array;
    }

    注意自己的button.js路径,button.js内容为:

    (function() {
      tinymce.create('tinymce.plugins.lbButtons', {
        init: function( editor, url ) {
    	//附件插入按钮
    	editor.addButton( 'down_button', {
    	title: '插入附件',
    	image : url+'/down.svg',
    	onclick: function() {
    	editor.windowManager.open({
    	    title: '插入附件',
    	    body: [
                {
    		type: 'textbox',
    		name: 'down',
    		label: '附件地址'
    	    }
                ],
    		onsubmit: function( e ) {
    		editor.insertContent( '[sdfile url="' + e.data.down + '"]' );
    	    }
    	});
    	}		
    	});
    	},
    	createControl: function( n, cm ) {
    	    return null;
            }
    });
    tinymce.PluginManager.add( 'lb_button_script', tinymce.plugins.lbButtons );
    })();

    title为tip提示,image为按钮的图标(url为当前js的路径,所以将图标与js放在一个文件夹即可)。短代码的输出根据自己的要求来修改即可。

    Wordpress编辑器添加可视化按钮

    接下来就可以在可视化窗口直接点击刚刚添加的按钮。下面说说tinymce的几个文本框属性:

    {
                        type   : 'listbox',
                        name   : 'listbox',
                        label  : 'listbox',
                        values : [
                            { text: 'Test1', value: 'test1' },
                            { text: 'Test2', value: 'test2' },
                            { text: 'Test3', value: 'test3' }
                        ],
                        value : 'test2' // Sets the default
                    },
                    {
                        type   : 'combobox',
                        name   : 'combobox',
                        label  : 'combobox',
                        values : [
                            { text: 'Test', value: 'test' },
                            { text: 'Test2', value: 'test2' }
                        ]
                    },
                    {
                        type   : 'textbox',
                        name   : 'textbox',
                        label  : 'textbox',
                        tooltip: 'Some nice tooltip to use',
                        value  : 'default value'
                    },
                    {
                        type   : 'tooltip',
                        name   : 'tooltip',
                        label  : 'tooltip ( you dont use it like this check textbox params )'
                    },
                    {
                        type   : 'button',
                        name   : 'button',
                        label  : 'button ( i dont know the other params )',
                        text   : 'My Button'
                    },
                    {
                        type   : 'buttongroup',
                        name   : 'buttongroup',
                        label  : 'buttongroup ( i dont know the other params )',
                        items  : [
                            { text: 'Button 1', value: 'button1' },
                            { text: 'Button 2', value: 'button2' }
                        ]
                    },
                    {
                        type   : 'checkbox',
                        name   : 'checkbox',
                        label  : 'checkbox ( it doesn`t seem to accept more than 1 )',
                        text   : 'My Checkbox',
                        checked : true
                    },
                    {
                        type   : 'colorbox',
                        name   : 'colorbox',
                        label  : 'colorbox ( i have no idea how it works )',
                        // text   : '#fff',
                        values : [
                            { text: 'White', value: '#fff' },
                            { text: 'Black', value: '#000' }
                        ]
                    },
                    {
                        type   : 'panelbutton',
                        name   : 'panelbutton',
                        label  : 'panelbutton ( adds active state class to it,visible only on hover )',
                        text   : 'My Panel Button'
                    },
                    {
                        type   : 'colorbutton',
                        name   : 'colorbutton',
                        label  : 'colorbutton ( no idea... )',
                        // text   : 'My colorbutton'
                    },
                    {
                        type   : 'colorpicker',
                        name   : 'colorpicker',
                        label  : 'colorpicker'
                    },
                    {
                        type   : 'radio',
                        name   : 'radio',
                        label  : 'radio ( defaults to checkbox, or i`m missing something )',
                        text   : 'My Radio Button'
                    }

    更多的tinymce文档,可以参考官网手册。如果你需要添加多个按钮,将JS文件进行扩展即可,有问题可以给我留言。
    END

    Responses

    您的电子邮箱地址不会被公开。 必填项已用*标注

    Up Next:

    WordPress后台创建Ajax文章Meta Boxes

    WordPress后台创建Ajax文章Meta Boxes