粘贴到TinyMCE时完全去掉所有隐藏的格式

时间:2014-11-27 作者:Christine Cooper

在WordPress v4+中,当用户将内容粘贴到TinyMCE visual editor中时,我想删除所有隐藏的格式。

当用户插入Microsoft Word中的文本时,“粘贴为文本”按钮会起作用,但在其他应用程序(如OSX页面)中则不会起作用。

您可以使用以下内容过滤掉Word的所有格式(谢谢Till Kruss):

class PasteAsPlainText {

    function __construct() {

        add_action( \'admin_init\', array( $this, \'init\' ) );

    }

    function init() {

        add_filter( \'tiny_mce_before_init\', array( $this, \'forcePasteAsPlainText\' ) );
        add_filter( \'teeny_mce_before_init\', array( $this, \'forcePasteAsPlainText\' ) );
        add_filter( \'teeny_mce_plugins\', array( $this, \'loadPasteInTeeny\' ) );
        add_filter( \'mce_buttons_2\', array( $this, \'removePasteAsPlainTextButton\' ) );

    }

    function forcePasteAsPlainText( $mceInit ) {

        global $tinymce_version;

        if ( $tinymce_version[0] < 4 ) {
            $mceInit[ \'paste_text_sticky\' ] = true;
            $mceInit[ \'paste_text_sticky_default\' ] = true;
        } else {
            $mceInit[ \'paste_as_text\' ] = true;
        }

        return $mceInit;
    }

    function loadPasteInTeeny( $plugins ) {

        return array_merge( $plugins, (array) \'paste\' );

    }

    function removePasteAsPlainTextButton( $buttons ) {

        if( ( $key = array_search( \'pastetext\', $buttons ) ) !== false ) {
            unset( $buttons[ $key ] );
        }

        return $buttons;

    }

}

new PasteAsPlainText();
然后,您可以通过选择要显示的按钮来隐藏粘贴为文本按钮(以禁止用户取消对其的锁定):

function formatTinyMCE( $in ) {
    $in[\'toolbar1\'] = \'bold,custom_em,blockquote,aligncenter,link,unlink,spellchecker,undo,removeformat\';
    return $in; 
}
add_filter( \'tiny_mce_before_init\', \'formatTinyMCE\' );
现在,我们已经把单词排除在外了(最后),我们如何完全剥离粘贴到TinyMCE中的所有隐藏格式?

UPDATE: 一种方法是找到一个init选项,如paste_word_valid_elements 并有一个空的有效标记列表。

1 个回复
SO网友:Kolya Korobochkin

我不太明白您需要什么,但我认为您试图从任何地方插入纯文本:浏览器、m$Word、页面。

为此,您可以使用Advanced TinyMCE Configuration 插件。下载并激活此插件后,需要手动配置。此解决方案优于您在上面问题部分中建议的代码)。

Option name                  Value
paste_strip_class_attributes all
paste_remove_spans           true
paste_remove_styles          true
paste_as_text                true
paste_text_sticky            true
block_formats                Paragraph=p;Header 2=h2;...
config的所有这些部分(参数)都可以基于Tiny MCE documentation pages.

  1. paste_strip_class_attributes — 3.?.?中的旧属性。?。?用于删除所有标记属性的版本,如href, alt, class,onError,..
  2. paste_remove_spans — 也是从3。?。?版本允许您移动所有跨度(内联?)粘贴时的元素
  3. paste_remove_styles — 如果为true,则在显示时删除所有样式信息,而不管浏览器类型如何。从Word 2000粘贴将导致tinyMCE出错
  4. paste_as_text — 此选项允许您设置“粘贴为文本”编辑菜单选项的默认状态。默认情况下禁用,但默认情况下可以强制启用
  5. paste_text_sticky — 保持粘贴文本功能处于活动状态,直到用户取消选择“粘贴为文本”按钮
  6. block_formats — 我的站点的其他配置:)
此配置在我的站点上运行良好,我总是像纯文本一样在TinyMCE中插入文本。

还有用于TinyMCE调优的helpfull插件TinyMCE Advanced.

结束

相关推荐

添加到数组并通过do_action/Apply_Filters传递它

作为练习,我正在使用PHPclass to add meta boxes 我在GitHub上找到了。我只是复制了代码,现在我正在玩它来理解它。其工作原理如下:包含该类的文件包含在init中。在该文件内部,但在类外部,有一个空数组$meta_boxes 已初始化之后,使用apply_filters. 我猜是apply_filters 使用而不是do_action 因为后者不返回任何内容——$meta_boxes = apply_filters( \'cmb_meta_boxes\', $meta_boxes