wp_tinymce_inline_scripts()
概述
wp_tinymce_inline_scripts() 函数用于为块编辑器中的 TinyMCE 添加内联脚本,主要针对 Classic block 的初始化设置。它通过一系列过滤器和配置数组来扩展和覆盖默认的 TinyMCE 设置。
关键要点
- 函数 wp_tinymce_inline_scripts() 为 Classic block 的 TinyMCE 编辑器生成内联脚本,设置包括插件、工具栏按钮等。
- 使用多个过滤器(如 tiny_mce_plugins、mce_buttons、tiny_mce_before_init 等)允许开发者自定义 TinyMCE 配置。
- 函数内部处理插件列表、工具栏按钮、外部插件等,并将最终设置转换为 JavaScript 对象,通过 wp_scripts->add_inline_script() 添加到 wp-block-library 脚本中。
- 支持禁用标题功能,通过 disable_captions 过滤器控制。
代码示例
function wp_tinymce_inline_scripts() {
global $wp_scripts;
$editor_settings = apply_filters( 'wp_editor_settings', array( 'tinymce' => true ), 'classic-block' );
$tinymce_plugins = array(
'charmap',
'colorpicker',
'hr',
'lists',
'media',
'paste',
'tabfocus',
'textcolor',
'fullscreen',
'wordpress',
'wpautoresize',
'wpeditimage',
'wpemoji',
'wpgallery',
'wplink',
'wpdialogs',
'wptextpattern',
'wpview',
);
$tinymce_plugins = apply_filters( 'tiny_mce_plugins', $tinymce_plugins, 'classic-block' );
$tinymce_plugins = array_unique( $tinymce_plugins );
// 更多代码处理工具栏、设置合并等
$tinymce_settings = array(
'plugins' => implode( ',', $tinymce_plugins ),
'toolbar1' => implode( ',', $toolbar1 ),
'toolbar2' => implode( ',', $toolbar2 ),
'toolbar3' => implode( ',', $toolbar3 ),
'toolbar4' => implode( ',', $toolbar4 ),
'external_plugins' => wp_json_encode( $external_plugins ),
'classic_block_editor' => true,
);
$tinymce_settings = apply_filters( 'tiny_mce_before_init', $tinymce_settings, 'classic-block' );
// 转换为 JavaScript 对象
$init_obj = '';
foreach ( $tinymce_settings as $key => $value ) {
if ( is_bool( $value ) ) {
$val = $value ? 'true' : 'false';
$init_obj .= $key . ':' . $val . ',';
continue;
} elseif ( ! empty( $value ) && is_string( $value ) && (
( '{' === $value[0] && '}' === $value[ strlen( $value ) - 1 ] ) ||
( '[' === $value[0] && ']' === $value[ strlen( $value ) - 1 ] ) ||
preg_match( '/^\(?function ?\(/', $value ) ) ) {
$init_obj .= $key . ':' . $value . ',';
continue;
}
$init_obj .= $key . ':"' . $value . '",';
}
$init_obj = '{' . trim( $init_obj, ' ,' ) . '}';
$script = 'window.wpEditorL10n = {
tinymce: {
baseURL: ' . wp_json_encode( includes_url( 'js/tinymce' ), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) . ',
suffix: ' . ( SCRIPT_DEBUG ? '""' : '".min"' ) . ',
settings: ' . $init_obj . ',
}
}';
$wp_scripts->add_inline_script( 'wp-block-library', $script, 'before' );
}注意事项
- 此函数自 WordPress 5.0.0 版本引入,专门用于 Classic block 的 TinyMCE 配置。
- 开发者可以通过相关过滤器(如 tiny_mce_plugins、mce_buttons 等)自定义插件和工具栏,以适应特定需求。
- 函数生成的脚本通过 wp_scripts->add_inline_script() 添加到 wp-block-library 脚本之前,确保在块编辑器中正确加载。
- 注意处理布尔值和特殊字符串(如 JSON 或函数)时的转换逻辑,以避免 JavaScript 错误。
Adds inline scripts required for the TinyMCE in the block editor.
Description
These TinyMCE init settings are used to extend and override the default settings from _WP_Editors::default_settings() for the Classic block.
Source
function wp_tinymce_inline_scripts() {
global $wp_scripts;
/** This filter is documented in wp-includes/class-wp-editor.php */
$editor_settings = apply_filters( 'wp_editor_settings', array( 'tinymce' => true ), 'classic-block' );
$tinymce_plugins = array(
'charmap',
'colorpicker',
'hr',
'lists',
'media',
'paste',
'tabfocus',
'textcolor',
'fullscreen',
'wordpress',
'wpautoresize',
'wpeditimage',
'wpemoji',
'wpgallery',
'wplink',
'wpdialogs',
'wptextpattern',
'wpview',
);
/** This filter is documented in wp-includes/class-wp-editor.php */
$tinymce_plugins = apply_filters( 'tiny_mce_plugins', $tinymce_plugins, 'classic-block' );
$tinymce_plugins = array_unique( $tinymce_plugins );
$disable_captions = false;
// Runs after `tiny_mce_plugins` but before `mce_buttons`.
/** This filter is documented in wp-admin/includes/media.php */
if ( apply_filters( 'disable_captions', '' ) ) {
$disable_captions = true;
}
$toolbar1 = array(
'formatselect',
'bold',
'italic',
'bullist',
'numlist',
'blockquote',
'alignleft',
'aligncenter',
'alignright',
'link',
'unlink',
'wp_more',
'spellchecker',
'wp_add_media',
'wp_adv',
);
/** This filter is documented in wp-includes/class-wp-editor.php */
$toolbar1 = apply_filters( 'mce_buttons', $toolbar1, 'classic-block' );
$toolbar2 = array(
'strikethrough',
'hr',
'forecolor',
'pastetext',
'removeformat',
'charmap',
'outdent',
'indent',
'undo',
'redo',
'wp_help',
);
/** This filter is documented in wp-includes/class-wp-editor.php */
$toolbar2 = apply_filters( 'mce_buttons_2', $toolbar2, 'classic-block' );
/** This filter is documented in wp-includes/class-wp-editor.php */
$toolbar3 = apply_filters( 'mce_buttons_3', array(), 'classic-block' );
/** This filter is documented in wp-includes/class-wp-editor.php */
$toolbar4 = apply_filters( 'mce_buttons_4', array(), 'classic-block' );
/** This filter is documented in wp-includes/class-wp-editor.php */
$external_plugins = apply_filters( 'mce_external_plugins', array(), 'classic-block' );
$tinymce_settings = array(
'plugins' => implode( ',', $tinymce_plugins ),
'toolbar1' => implode( ',', $toolbar1 ),
'toolbar2' => implode( ',', $toolbar2 ),
'toolbar3' => implode( ',', $toolbar3 ),
'toolbar4' => implode( ',', $toolbar4 ),
'external_plugins' => wp_json_encode( $external_plugins ),
'classic_block_editor' => true,
);
if ( $disable_captions ) {
$tinymce_settings['wpeditimage_disable_captions'] = true;
}
if ( ! empty( $editor_settings['tinymce'] ) && is_array( $editor_settings['tinymce'] ) ) {
$tinymce_settings = array_merge( $tinymce_settings, $editor_settings['tinymce'] );
}
/** This filter is documented in wp-includes/class-wp-editor.php */
$tinymce_settings = apply_filters( 'tiny_mce_before_init', $tinymce_settings, 'classic-block' );
/*
* Do "by hand" translation from PHP array to js object.
* Prevents breakage in some custom settings.
*/
$init_obj = '';
foreach ( $tinymce_settings as $key => $value ) {
if ( is_bool( $value ) ) {
$val = $value ? 'true' : 'false';
$init_obj .= $key . ':' . $val . ',';
continue;
} elseif ( ! empty( $value ) && is_string( $value ) && (
( '{' === $value[0] && '}' === $value[ strlen( $value ) - 1 ] ) ||
( '[' === $value[0] && ']' === $value[ strlen( $value ) - 1 ] ) ||
preg_match( '/^(?function ?(/', $value ) ) ) {
$init_obj .= $key . ':' . $value . ',';
continue;
}
$init_obj .= $key . ':"' . $value . '",';
}
$init_obj = '{' . trim( $init_obj, ' ,' ) . '}';
$script = 'window.wpEditorL10n = {
tinymce: {
baseURL: ' . wp_json_encode( includes_url( 'js/tinymce' ), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ) . ',
suffix: ' . ( SCRIPT_DEBUG ? '""' : '".min"' ) . ',
settings: ' . $init_obj . ',
}
}';
$wp_scripts->add_inline_script( 'wp-block-library', $script, 'before' );
}
Hooks
- apply_filters( ‘disable_captions’, bool $bool )
-
Filters whether to disable captions.
- apply_filters( ‘mce_buttons’, array $mce_buttons, string $editor_id )
-
Filters the first-row list of TinyMCE buttons (Visual tab).
- apply_filters( ‘mce_buttons_2’, array $mce_buttons_2, string $editor_id )
-
Filters the second-row list of TinyMCE buttons (Visual tab).
- apply_filters( ‘mce_buttons_3’, array $mce_buttons_3, string $editor_id )
-
Filters the third-row list of TinyMCE buttons (Visual tab).
- apply_filters( ‘mce_buttons_4’, array $mce_buttons_4, string $editor_id )
-
Filters the fourth-row list of TinyMCE buttons (Visual tab).
- apply_filters( ‘mce_external_plugins’, array $external_plugins, string $editor_id )
-
Filters the list of TinyMCE external plugins.
- apply_filters( ‘tiny_mce_before_init’, array $mce_init, string $editor_id )
-
Filters the TinyMCE config before init.
- apply_filters( ‘tiny_mce_plugins’, array $plugins, string $editor_id )
-
Filters the list of default TinyMCE plugins.
- apply_filters( ‘wp_editor_settings’, array $settings, string $editor_id )
-
Filters the wp_editor() settings.
Changelog
| Version | Description |
|---|---|
| 5.0.0 | Introduced. |