[wp-trac] [WordPress Trac] #64841: wp_editor() with quicktags enabled does not force-print buttons.css on the frontend, unlike editor.css

WordPress Trac noreply at wordpress.org
Wed Mar 11 15:12:05 UTC 2026


#64841: wp_editor() with quicktags enabled does not force-print buttons.css on the
frontend, unlike editor.css
--------------------------+-----------------------------
 Reporter:  vnoben        |      Owner:  (none)
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  Editor        |    Version:
 Severity:  normal        |   Keywords:
  Focuses:                |
--------------------------+-----------------------------
 == Summary ==

 When `wp_editor()` is used on the frontend with `quicktags` explicitly
 enabled, `editor.css` is correctly force-printed inline (even after
 `wp_head()` has fired), but `buttons.css` — which styles the QuickTags
 toolbar buttons — is only enqueued and therefore never reaches the page.
 The result is that QuickTags buttons render completely unstyled on the
 frontend.

 == Steps to Reproduce ==

 Call `wp_editor()` inside a frontend page template with `quicktags`
 explicitly set:

 {{{
 wp_editor(
     '',
     'my-editor',
     array(
         'tinymce'   => true,
         'quicktags' => array(
             'buttons' => 'strong,em,link,ul,ol,li,close',
         ),
     )
 );
 }}}

 Open the page in a browser and switch to the '''"Text"''' or '''"Code"'''
 tab of the editor.

 == Expected Behaviour ==

 QuickTags buttons are styled, consistent with how they appear in `wp-
 admin`. Since `quicktags` was explicitly passed to `wp_editor()`, all
 styles required to render those buttons should be loaded.

 == Actual Behaviour ==

 QuickTags buttons render without styling. Inspecting the page source shows
 `editor.css` is present (force-printed inline), but `buttons.css` is
 absent.

 == Root Cause ==

 In `wp-includes/class-wp-editor.php`, the `editor()` method force-prints
 `editor-buttons` regardless of when it is called relative to `wp_head()`:

 {{{
 // ~line 212
 wp_print_styles( 'editor-buttons' );
 }}}

 However, `buttons` is only enqueued inside `enqueue_scripts()`:

 {{{
 // ~line 867
 if ( $default_scripts || self::$has_quicktags ) {
     wp_enqueue_script( 'quicktags' );
     wp_enqueue_style( 'buttons' ); // has no effect after wp_head() has
 fired
 }
 }}}

 On the frontend, `wp_editor()` is typically called inside the page
 template body, after `wp_head()` has already run. `wp_enqueue_style()` at
 that point is a no-op for stylesheet output. The `editor-buttons` style
 avoids this problem because it is force-printed via `wp_print_styles()`.
 `buttons` has no equivalent accommodation.

 '''Note:''' if `quicktags` is not passed to `wp_editor()` it would be
 reasonable that `buttons.css` is not loaded. The inconsistency is
 specifically that even when `quicktags` is explicitly configured by the
 developer, the required styles are not force-printed the same way
 `editor.css` is.

 == Proposed Fix ==

 In the `editor()` method, alongside the existing `wp_print_styles(
 'editor-buttons' )` call, also force-print `buttons` when QuickTags is
 enabled:

 {{{
 wp_print_styles( 'editor-buttons' );

 if ( ! empty( $set['quicktags'] ) ) {
     wp_print_styles( 'buttons' );
 }
 }}}

 == Additional Context ==

 This became a visible regression in '''WordPress 6.7''', when QuickTags
 buttons were migrated from the custom `.ed_button` class (whose styles
 live in `editor.css`) to the standard `.button` class (whose styles live
 in `buttons.css`). Prior to 6.7, `editor.css` alone was sufficient to
 style the buttons, which masked this inconsistency entirely. Any site
 using `wp_editor()` with QuickTags on the frontend and running WordPress
 6.7 or later is affected.

 This ticket was created with the help of a Claude code LLM agent after I
 discovered the broken quicktag buttons and the missing buttons.css styles
 on the front-end. Above mentioned line numbers, root cause and proposed
 fix are unchecked/untested by said developer, but seems to make sense.
 Tested in latest 6.9.3 version.

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/64841>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list