TinyMCE:将CSS添加到格式下拉列表


20

我使用add_editor_style()成功添加了TinyMCE样式表,以便可以在TinyMCE编辑器的主体中预览样式。

但是,我是否假设add_editor_style()函数只能访问编辑器主体的样式?

如果是这样,还有其他方法或函数可以用来访问TinyMCE Format下拉菜单的样式吗?

在此处输入图片说明

Answers:


44

您无法增强下拉列表formatselect。但是您可以tiny_mce_before_init通过第二个下拉菜单来增强功能,styleselect默认的WordPress安装中包含隐藏内容。该文档列出了所有默认值和可能性。

  • 内联–产生内联元素的名称,例如“ span”。当前的文本选择将包装在此内联元素中。
  • block –要生成的块元素的名称,例如“ h1”。选择中的现有块元素将替换为新的块元素。
  • 选择器– CSS 3选择器模式,用于在选择中查找元素。这可用于将类应用于特定元素或复杂的事物,例如表中的奇数行。
  • classes –用空格分隔的类列表,以应用所选元素或新的inline / block元素。
  • 样式–名称/值对象以及要应用的CSS样式项,例如颜色等。
  • 属性–名称/值对象,具有要应用于所选元素或新的行内/块元素的属性。
  • 精确–使用时禁用合并相似样式功能。对于某些CSS继承问题,例如下划线/删除线的文本修饰,这是必需的。
  • 包装器(wrapper)–告知当前格式是块元素的容器格式的状态。例如div包装器或blockquote。

样式按钮

请注意,默认情况下,样式下拉列表在WordPress中是隐藏的。首先,将用于自定义格式的按钮添加到TinyMCE的菜单栏中,例如在第2行中带有hook mce_buttons_2

add_filter( 'mce_buttons_2', 'fb_mce_editor_buttons' );
function fb_mce_editor_buttons( $buttons ) {

    array_unshift( $buttons, 'styleselect' );
    return $buttons;
}

自定义样式

然后增强此按钮的下拉菜单。ASLO有用通过在阵列中的附加价值enancement,参见抄本的这个例子。

/**
 * Add styles/classes to the "Styles" drop-down
 */ 
add_filter( 'tiny_mce_before_init', 'fb_mce_before_init' );

function fb_mce_before_init( $settings ) {

    $style_formats = array(
        array(
            'title' => 'Download Link',
            'selector' => 'a',
            'classes' => 'download'
            ),
        array(
            'title' => 'My Test',
            'selector' => 'p',
            'classes' => 'mytest',
        ),
        array(
            'title' => 'AlertBox',
            'block' => 'div',
            'classes' => 'alert_box',
            'wrapper' => true
        ),
        array(
            'title' => 'Red Uppercase Text',
            'inline' => 'span',
            'styles' => array(
                'color'         => 'red', // or hex value #ff0000
                'fontWeight'    => 'bold',
                'textTransform' => 'uppercase'
            )
        )
    );

    $settings['style_formats'] = json_encode( $style_formats );

    return $settings;

}

结果

在此处输入图片说明

增强的下拉菜单

您还可以使用树形菜单增强下拉菜单。从上面的示例源创建var,并在数组中添加更多结构,例如follow源。

    $style_formats = array(
        array(
            'title' => 'Headers',
                'items' => array(
                array(
                    'title' => 'Header 1',
                    'format' => 'h1',
                    'icon' => 'bold'
                ),
                array(
                    'title' => 'Header 2',
                    'format' => 'h2',
                    'icon' => 'bold'
                )
            )
        ),
        array(
            'title' => 'Download Link',
            'selector' => 'a',
            'classes' => 'download'
        )
    );

在此处输入图片说明

有关更多可能性和参数,请参见“样式格式”下拉字段的默认值(使用JavaScript编写)。

var defaultStyleFormats = [
    {title: 'Headers', items: [
        {title: 'Header 1', format: 'h1'},
        {title: 'Header 2', format: 'h2'},
        {title: 'Header 3', format: 'h3'},
        {title: 'Header 4', format: 'h4'},
        {title: 'Header 5', format: 'h5'},
        {title: 'Header 6', format: 'h6'}
    ]},

    {title: 'Inline', items: [
        {title: 'Bold', icon: 'bold', format: 'bold'},
        {title: 'Italic', icon: 'italic', format: 'italic'},
        {title: 'Underline', icon: 'underline', format: 'underline'},
        {title: 'Strikethrough', icon: 'strikethrough', format: 'strikethrough'},
        {title: 'Superscript', icon: 'superscript', format: 'superscript'},
        {title: 'Subscript', icon: 'subscript', format: 'subscript'},
        {title: 'Code', icon: 'code', format: 'code'}
    ]},

    {title: 'Blocks', items: [
        {title: 'Paragraph', format: 'p'},
        {title: 'Blockquote', format: 'blockquote'},
        {title: 'Div', format: 'div'},
        {title: 'Pre', format: 'pre'}
    ]},

    {title: 'Alignment', items: [
        {title: 'Left', icon: 'alignleft', format: 'alignleft'},
        {title: 'Center', icon: 'aligncenter', format: 'aligncenter'},
        {title: 'Right', icon: 'alignright', format: 'alignright'},
        {title: 'Justify', icon: 'alignjustify', format: 'alignjustify'}
    ]}
];

将自定义样式表添加到编辑器

现在是最后一点,您可以通过hook包含此格式的自定义CSS mce_css

/**
 * Apply styles to the visual editor
 */  
add_filter( 'mce_css', 'fb_mcekit_editor_style');
function fb_mcekit_editor_style($url) {

    if ( ! empty( $url ) )
        $url .= ',';

    // Retrieves the plugin directory URL
    // Change the path here if using different directories
    $url .= trailingslashit( plugin_dir_url( __FILE__ ) ) . '/my-editor-styles.css';

    return $url;
}

不要忘记也将此样式表规则添加到前端样式表中。

删除格式按钮

作为增强功能,您可以formatselect通过检查按钮数组中的值来删除下拉按钮。将以下源代码添加到fb_mce_editor_buttons挂钩处的函数中mce_buttons_2

$value = array_search( 'formatselect', $buttons );
if ( FALSE !== $value ) {
    foreach ( $buttons as $key => $value ) {
        if ( 'formatselect' === $value )
            unset( $buttons[$key] );
    }
}

我想我从概念上理解了这一点:本质上,您删除了WP的标准格式框,然后添加了自己的样式下拉菜单以控制样式。我的理解正确吗?
Marc P

对。目前,我找不到钩子来更改formatselect下拉列表。该下拉列表没有构建菜单的功能,是WP的tinymce.js中的静态值。
bueltge 2014年

我现在已经找到了这个答案的提示。
bueltge 2014年

喔好吧!谢谢,这是一个很好的解决方案。我会尝试一下!
Marc P

2
注意:默认样式可以通过添加$settings['style_formats_merge'] = true;到»fb_mce_before_init()«中来添加到格式下拉列表中。
Nicolai 2015年

5

根据此答案,使样式显示在下拉菜单中的关键是unset($settings['preview_styles']);

add_filter( 'tiny_mce_before_init', 'fb_mce_before_init' );
function fb_mce_before_init( $settings ) {

    // customize as desired

    // unset the preview styles
    unset($settings['preview_styles']);`

    return $settings;
}

2

非常有帮助,感谢您的defaultstyles指点。我发现在将这些默认选项转换为有效的JSON(无效的JavaScript)之前,合并数组不起作用。下面允许附加 WordPress tinymce的下拉列表,而不是替换

默认选项(JSON):

$defaults = '[{ "title": "Headers", "items": [
        { "title": "Header 1", "format": "h1" },
        { "title": "Header 2", "format": "h2" },
        { "title": "Header 3", "format": "h3" },
        { "title": "Header 4", "format": "h4" },
        { "title": "Header 5", "format": "h5" },
        { "title": "Header 6", "format": "h6" }
    ] },

    { "title": "Inline", "items": [
        { "title": "Bold", "icon": "bold", "format": "bold" },
        { "title": "Italic", "icon": "italic", "format": "italic" },
        { "title": "Underline", "icon": "underline", "format": "underline" },
        { "title": "Strikethrough", "icon": "strikethrough", "format": "strikethrough" },
        { "title": "Superscript", "icon": "superscript", "format": "superscript" },
        { "title": "Subscript", "icon": "subscript", "format": "subscript" },
        { "title": "Code", "icon": "code", "format": "code" }
    ] },

    { "title": "Blocks", "items": [
        { "title": "Paragraph", "format": "p" },
        { "title": "Blockquote", "format": "blockquote" },
        { "title": "Div", "format": "div" },
        { "title": "Pre", "format": "pre" }
    ] },

    { "title": "Alignment", "items": [
        { "title": "Left", "icon": "alignleft", "format": "alignleft" },
        { "title": "Center", "icon": "aligncenter", "format": "aligncenter" },
        { "title": "Right", "icon": "alignright", "format": "alignright" },
        { "title": "Justify", "icon": "alignjustify", "format": "alignjustify" }
        ] }
 ]'; 

在functions.php中,返回较大的选项哈希:

add_filter( 'tiny_mce_before_init', 'fb_mce_before_init' );
function fb_mce_before_init( $settings ) {

    $style_formats = array(
    //....

    $settings['style_formats'] = json_encode( array_merge( json_decode($defaults), $style_formats ) );
    return $settings;
}

注意:默认样式可以通过添加$settings['style_formats_merge'] = true;到»fb_mce_before_init()«中来添加到格式下拉列表中。
Nicolai 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.