问题描述
我使用 add_editor_style() 成功添加了 TinyMCE 样式表,以便我可以预览 TinyMCE 编辑器正文中的样式。
但是,我是否正确地假设 add_editor_style() 函数只能访问编辑器的主体的样式?
如果是,是否有另一种方法或功能,我可以用来访问 TinyMCE 格式下拉列表的样式?
最佳解决方案
您不能增强下拉列表 formatselect
。但是可以用钩子 tiny_mce_before_init
来增强 styleselect
的第二个下拉菜单,在默认的 WordPress 安装中隐藏。 documentation 列出所有默认值和可能性。
-
inline – 要生成的内联元素的名称,例如 「span」 。当前文本选择将被包装在此内联元素中。
-
块 – 要生成的块元素的名称,例如 「h1」 。选择中的现有块元素被替换为新的块元素。
-
选择器 – CSS 3 选择器模式以查找选择内的元素。这可以用于将类应用于特定元素或复杂的事物,如表中的奇数行。
-
类 – 用于应用所选元素或新的内联/块元素的空格分隔列表。
-
样式 – 使用 CSS 样式项目 (如颜色等) 的名称/值对象
-
属性 – 名称/值对象,其属性应用于所选元素或新的内联/块元素。
-
精确 – 禁用合并类似样式功能时使用。这是一些 CSS 继承问题所需要的,例如 text-decoration 用于下划线/strikethough 。
-
wrapper – 指示当前格式是块元素的容器格式的状态。例如一个 div 封装或 blockquote 。
风格按钮
请注意,默认情况下,样式下拉列表在 WordPress 中被隐藏。首先将自定义格式的按钮添加到 TinyMCE 的菜单栏中,在示例行 2 中使用钩子 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 通过数组中的附加值有助于启用,有关此示例,请参阅 codex 。
/**
* 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;
}
Result
增强下拉菜单
您还可以使用树形菜单增强下拉菜单。从上面的示例源创建 var,在数组中具有更多的结构,如跟随源。
$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'}
]}
];
将自定义样式表添加到编辑器
现在是最后一点,您可以通过钩子 mce_css
包含此格式的自定义 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
加入到函数 fb_mce_editor_buttons
中。
$value = array_search( 'formatselect', $buttons );
if ( FALSE !== $value ) {
foreach ( $buttons as $key => $value ) {
if ( 'formatselect' === $value )
unset( $buttons[$key] );
}
}
次佳解决方案
每个 this answer,获取样式出现在下拉菜单中的关键是 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;
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。