在WP 4.6中为TinyMCE添加自动关闭快捷码按钮

时间:2016-07-22 作者:DᴀʀᴛʜVᴀᴅᴇʀ

我熟悉创建自动关闭的短代码,如:

// shortcode
function wpse_shortcode_example( $wpse_atts ) {

    // Attributes
    $wpse_atts = shortcode_atts(
        array(
            \'foo\' => \'bar\',
            \'width\' => \'100%\',
            \'height\' => \'auto\',
        ),
        $wpse_atts,
        \'wpse\'
    );

    // Return
    return \'<embed 
             src="\' . $wpse_atts[\'src\'] . \'"
             width="\' . $wpse_atts[\'width\'] . \'"
             height="\' . $wpse_atts[\'height\'] . \'";

}
add_shortcode( \'wpse\', \'wpse_shortcode_example\' );
但我想开始将这些添加到TinyMCE中。我已经进行了几次搜索,但所有搜索结果要么已过时,要么使用了不再推荐的方法:

我知道开发人员仍处于早期阶段,但插件手册只简要介绍了TinyMCE Enhanced ShortcodesShortcode APIadd_shortcode() 别提TinyMCE。

这就引出了我的问题。在TinyMCE编辑器中将自动关闭的短代码转换为可单击按钮的基本步骤是什么?

1 个回复
最合适的回答,由SO网友:Christine Cooper 整理而成

我们首先添加自定义TinyMCE按钮:

function add_mce_button_custom_em() {
    // check user permissions
    if ( !current_user_can( \'edit_posts\' ) && !current_user_can( \'edit_pages\' ) ) {
        return;
    }
    // check if WYSIWYG is enabled
    if ( \'true\' == get_user_option( \'rich_editing\' ) ) {
        add_filter( \'mce_external_plugins\', \'add_tinymce_plugin_custom_em\' );
        add_filter( \'mce_buttons\', \'register_mce_button_custom_em\' );
    }
}
add_action(\'admin_head\', \'add_mce_button_custom_em\');
然后,我们声明并注册新按钮:

// Declare script for new button
function add_tinymce_plugin_custom_em( $plugin_array ) {
    $plugin_array[\'custom_em\'] = get_template_directory_uri() .\'/plug/custom-em/custom-em.js\';
    return $plugin_array;
}

// Register new button in the editor
function register_mce_button_custom_em( $buttons ) {
    array_push( $buttons, \'custom_em\' );
    return $buttons;
}
最后,我们决定哪些按钮(有关按钮的更多信息,请访问Content Formatting) 我们想要展示。显然,如果您考虑了用户体验,那么只会显示其中的几个,例如:

// TinyMCE: TinyMCE choose which buttons you want to display
function myformatTinyMCE( $in ) {
    $in[\'toolbar1\'] = \'styleselect,bold,custom_em,blockquote,hr,aligncenter,link,unlink,spellchecker,undo,removeformat\';
    return $in;
}
add_filter( \'tiny_mce_before_init\', \'myformatTinyMCE\' );
正如您在add_tinymce_plugin_custom_em 函数中声明了一个javascript文件get_template_directory_uri() .\'/plug/custom-em/custom-em.js\'

因此,创建custom-em.js 文件,然后你有两种方法来处理这个问题。

您可以使用以下短代码格式[shortcode foo="" bar=""][shortcode][/shortcode].

让我们从[shortcode foo="" bar=""] 格式:

(function() {
    tinymce.create(\'tinymce.plugins.custom_em\', {
        init : function(ed, url) {
            ed.addButton(\'custom_em\', {
                title : \'Custom EM\',
                image : url+\'/images/btn_custom_em.png\',
                onclick : function() {
                    ed.execCommand(
                        "mceInsertContent",
                        false,
                        "[shortcode foo=\\"\\" bar=\\"\\"]"
                    );
                }
            });
        }
    });
    tinymce.PluginManager.add(\'custom_em\', tinymce.plugins.custom_em);
})(); 
如您所见,我们使用图像作为按钮图标。您可以将其更改为文本,如下例所示。

以下是我们在自己的平台上使用的内容,它将选择打包为:<em class="whatever">hello world</em>:

(function() {
    tinymce.PluginManager.add(\'custom_em\', function( editor, url ) {

        editor.on(\'init\', function(e) {
            this.formatter.register(\'thetarget\', {
                inline : \'em\',
                classes : \'whatever\'
            });
        });

        editor.addButton(\'custom_em\', {
            text: \'Custom EM\',
            icon: false,
            onclick : function() {
                var contents = editor.selection.getContent(),
                tags = jQuery(jQuery.parseHTML(contents)).find(\'em.whatever\').andSelf();
                editor.formatter.toggle(\'thetarget\');
            }
        });
    });
})(jQuery);
请发布结果并进行编辑。TinyMCE是一种瘟疫,需要头痛,但可以通过协作的方式解决。

相关推荐

Execute shortcodes in PHP

我在帖子编辑器中添加了一个地理位置快捷码,可以根据用户的位置显示不同的信息,将其放在帖子页面的内容中,效果非常好。如何在主题的PHP文件中执行此短代码[地理位置][地理位置]?我正在使用免费修改Wordpress主题,我想添加一个新的<span>[geolocation][/geolocation]Information text content</span> 但在主题的内部。php文件,我如何才能做到这一点?如果我直接加上<span>[geolocation][/ge