Recently, a newly acquired client needed the styling from the Customizer’s custom CSS to show in the classic editor (TinyMCE). In all my years of working with WordPress, this was the first time I’d had this request, so, knowing that you can inject styling into the TinyMCE editor, I set about finding a solution.
There are several ways to add custom styling to the classic editor, including:
- loading a custom stylesheet, using
add_editor_style('custom-editor-style.css')
, - loading a custom stylesheet, using
add_filter('mce_css')
, and - loading dynamic styles, using
add_filter('tiny_mce_before_init')
and appending style properties to$settings['content_style']
.
In this post, we’ll focus on the latter, which we can use to get the Customizer’s CSS.
Loading Customizer CSS into the Classic Editor
The Customizer’s theme CSS is stored in the post
table, with post type custom_css
. To get this we’ll use get_posts(), then we’ll append the post_content
to $mce_settings['content_style']
(after sanitising it). Here’s the WordPress filter, note that I’ve used an anonymous function, but you don’t have to:
add_filter('tiny_mce_before_init', function ($mce_init) {
$customizer_posts = get_posts('post_type=custom_css&numberposts=1');
$styles = $customizer_posts[0]->post_content ?? '';
// return early if no stlying was found
if (!$styles) return $mce_init;
// sanitise ready for use
$styles = sanitize_text_field($styles);
// add styling
if (isset($mce_init['content_style'])) {
$mce_init['content_style'] .= " $styles ";
} else {
$mce_init['content_style'] = " $styles ";
}
// return updated settings
return $mce_init;
});
And that’s how to add customizer CSS into the classic editor.
If you’re struggling with this or any other WordPress challenge, don’t hesitate to get in touch for further support.