Add Admin CSS

Description

Ever want to tweak the appearance of the WordPress admin pages by hiding stuff, moving stuff around, changing fonts, colors, sizes, etc? Any modification you may want to do with CSS can easily be done via this plugin.

Using this plugin you’ll easily be able to define additional CSS (inline and/or files by URL) to be added to all administration pages. Hooks are provided to customize the output of the CSS, the CSS files, and if/when the CSS should even be output (see Hooks section).

Links: Plugin Homepage | Plugin Directory Page | GitHub | Author Homepage

Developer Documentation

Developer documentation can be found in DEVELOPER-DOCS.md. That documentation covers the hooks provided by the plugin.

As an overview, these are the hooks provided by the plugin:

  • c2c_add_admin_css : Filter to customize the CSS that should be added directly to the admin page head.
  • c2c_add_admin_css_files : Filter to customize the list of CSS files to enqueue in the admin.
  • c2c_add_admin_css_disable_css : Filter to customize if the CSS defined via this plugin should be output or not.

Screenshots

  • A screenshot of the plugin’s admin settings page.

Installation

  1. Install via the built-in WordPress plugin installer. Or install the plugin code inside the plugins directory for your site (typically /wp-content/plugins/).
  2. Activate the plugin through the ‘Plugins’ admin menu in WordPress
  3. Go to “Appearance” -> “Admin CSS” and specify some CSS to be added into all admin pages. (You can also use the “Settings” link in the plugin’s entry on the admin “Plugins” page).

FAQ

Can I add CSS I defined via a file, or one that is hosted elsewhere?

Yes, via the “Admin CSS Files” input field on the plugin’s settings page.

Can I limit what admin pages the CSS gets output on?

By default, the CSS is added for every admin page on the site and for every user.

One option, if you wish to only use CSS and you want to limit use of CSS to certain admin pages, is to preface your selectors with admin page specific class(es) on the ‘body’ tag to ensure CSS only applies on certain admin pages. (e.g. body.edit-php h1 { color: purple; }).

Otherwise, programmatically you have full control over that behavior via the 'c2c_add_admin_css_disable_css' filter (see Hooks section). You’d hook that filter, determine the context, and decide if the CSS should be output or not. You could check what page is being loaded and/or who is the current user.

Can I limit what users the CSS applies to?

By default, the CSS is added for every admin page on the site and for every user.

Programmatically you have full control over that behavior via the 'c2c_add_admin_css_disable_css' filter (see Hooks section). You’d hook that filter, determine the context, and decide if the CSS should be output or not. You could check who is the current user and/or what page is being loaded.

There is currently no way to do this purely with CSS or through any other setting provided by the plugin.

How can I edit the plugin’s settings in the event I supplied CSS that prevents the admin pages from properly functioning or being seen?

It is certainly possible that you can put yourself in an unfortunate position by supplying CSS that could hide critical parts of admin pages, making it seemingly impossible to fix or revert your changes. Fortunately, there are a number of approaches you can take to correct the problem.

The recommended approach is to visit the URL for the plugin’s settings page, but appended with a special query parameter to disable the output of its CSS. The plugin’s settings page would typically be at a URL like https://example.com/wp-admin/themes.php?page=add-admin-css%2Fadd-admin-css.php. Append &c2c-no-css=1 to that, so that the URL is https://example.com/wp-admin/themes.php?page=add-admin-css%2Fadd-admin-css.php&c2c-no-css=1 (obviously change example.com with the domain name for your site).

There are other approaches you can use, though they require direct database or server filesystem access:

  • Some browsers (such as Firefox, via View -> Page Style -> No Style) allow you to disable styles for sites loaded in that tab. Other browsers may also support such functionality natively or through an extension. Chrome has an extension called Web Developer that adds the functionality.
  • If you’re familiar with doing so and have an idea of what CSS style you added that is causing problems, you can use your browser’s developer tools to inspect the page, find the element in question, and disable the offending style.
  • In the site’s wp-config.php file, define a constant to disable output of the plugin-defined CSS: define( 'C2C_ADD_ADMIN_CSS_DISABLED', true );. You can then visit the site’s admin. Just remember to remove that line after you’ve fixed the CSS (or at least change “true” to “false”). This is an alternative to the query parameter approach described above, though it persists while the constant remains defined. There will be an admin notice on the plugin’s setting page to alert you to the fact that the constant is defined and effectively disabling the plugin from adding any CSS.
  • Presuming you know how to directly access the database: within the site’s database, find the row with the option_name field value of c2c_add_admin_css and delete that row. The settings you saved for the plugin will be deleted and it will be like you’ve installed the plugin for the first time.
  • If your server has WP-CLI installed, you can delete the plugin’s setting from the commandline: wp option delete c2c_add_admin_css

The initial reaction by some might be to remove the plugin from the server’s filesystem. This will certainly disable the plugin and prevent the CSS you configured through it from taking effect, restoring the access and functionality to the backend. However, reinstalling the plugin will put you back into the original predicament because the plugin will use the previously-configured settings, which wouldn’t have changed.

How do I disable syntax highlighting?

The plugin’s syntax highlighting of CSS (available as of WP 4.9) honors the built-in setting for whether syntax highlighting should be enabled or not.

To disable syntax highlighting, go to your profile page. Next to “Syntax Highlighting”, click the checkbox labeled “Disable syntax highlighting when editing code”. Note that this checkbox disables syntax highlighting throughout the admin interface and not just specifically for the plugin’s settings page.

Does this plugin have unit tests?

Yes. The tests are not packaged in the release .zip file or included in plugins.svn.wordpress.org, but can be found in the plugin’s GitHub repository.

Reviews

April 9, 2022
Awesome plugin, works fantastic Well done!
November 7, 2021
Hi, I am a beginner and have no idea about CSS coding and wondered if someone can help with providing the CSS code to replace the footer color of the website with an image, thanks.
June 12, 2021
This plugin did *exactly* what I wanted. A plugin had dropped some ad stuff into the Publish box, but it had a good CSS class, so I just hid it. I really like that the text field for holding the CSS is intelligent and does things like auto include closing brackets, code coloring, etc.
April 29, 2021
If you get fed up of all the nag screens from themes and plugins nagging you to “Go Pro” etc, then this is a great plugin for adding css to hide them all. Really easy to use.
Read all 35 reviews

Contributors & Developers

“Add Admin CSS” is open source software. The following people have contributed to this plugin.

Contributors

“Add Admin CSS” has been translated into 3 locales. Thank you to the translators for their contributions.

Translate “Add Admin CSS” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

2.5 (2025-03-29)

Highlights:

This recommended long overdue release adds a new filter for fine-grained control of whether CSS should be output or not, updates the plugin framework to the most current version (for hardening and miscellaneous improvements), prevents translations from containing unintended markup, notes compatibility through WP 6.8+ and PHP 8.3+, drops compatibility with versions of WP older than 5.5, adds DEVELOPER-DOCS.md, and removes unit tests from release packaging, and more.

Details:

  • New: Add c2c_add_admin_css_disable_css filter to override if CSS defined via this plugin should be output or not
  • New: Add is_recovery_mode_enabled() to determine is recovery mode is enabled
  • Change: Only support query parameter method of enabling recovery mode if current user can configure plugin settings
  • Change: Display the files setting help text as a list rather than a paragraph
  • Change: Check specifically if recovery mode is enabled before displaying admin notice that recovery mode is enabled
  • Change: Explicitly state the plugin name in the recovery mode admin notice to avoid ambiguity
  • Change: Switch use of parse_url() to wp_parse_url()
  • Change: Escape output of all translated strings
  • Change: Use instance method invocation instead of a deprecated static method invocation
  • Change: Convert ‘input_attributes’ value of config items from a string to an array
  • Change: Add translator comments for a pair of strings with placeholders that didn’t have one
  • New: Add DEVELOPER-DOCS.md and move hooks documentation into it
  • Change: Update plugin framework to 068
    • 068:
    • Change: Discontinue unnecessary explicit loading of textdomain
    • Change: Ignore a PHPCS warning that doesn’t apply
    • Change: Minor code reformatting
    • Change: Note compatibility through WP 6.8+
    • Change: Update copyright date (2025)
    • Unit tests:
      • Change: Generify unit tests to centralize per-plugin configuration to the top of the test class
      • Change: Define method return types for PHP 8+ compatibility
      • New: Add some header documentation
    • 067:
    • Breaking: Require config attribute ‘input_attributes’ to be an array
    • Hardening: Treat input attributes as array and escape each element before output
    • Change: Ensure config attribute values are of the same datatype as their defaults
    • Change: Simplify form_action_url() to avoid using a server global
    • Change: Use form_action_url() in plugin_action_links() rather than duplicating its functionality
    • Change: Escape output of all translated strings
    • Change: Make get_hook() public rather than protected
    • Change: Explicitly declare object variables rather than doing so dynamically
    • Change: Convert register_filters() to an abstract declaration
    • Change: Use double quotes for attribute of paragraph for setting description
    • Change: Prevent unwarranted PHPCS complaints about nonces
    • Change: Improve function documentation
    • Change: Adjust function documentation formatting to align with WP core
    • Change: Note compatibility through WP 6.5+
    • Change: Drop compatibility with version of WP older than 5.5
    • Change: Update copyright date (2024)
    • 066:
    • New: Add customization of capability needed to manage plugin settings (via new filter {plugin_prefix}_manage_options_capability)
    • Change: Add styles for nested lists within settings descriptions
    • Change: Note compatibility through WP 6.3+
    • 065:
    • New: Add support for ‘inline_help’ setting configuration option
    • New: Add support for ‘raw_help’ setting configuration option
    • New: Add support for use of lists within settings descriptions
    • Change: Add an ‘id’ attribute to settings form
    • Change: Add styles for disabled input text fields and inline setting help notices
    • Change: Support ‘number’ input by assigning ‘small-text’ class
    • Change: Tweak styling for settings page footer
    • Change: Note compatibility through WP 6.2+
    • Change: Update copyright date (2023)
    • 064:
    • New: For checkbox settings, support a ‘more_help’ config option for defining help text to appear below checkbox and its label
    • Fix: Fix URL for plugin listing donate link
    • Change: Store donation URL as object variable
    • Change: Update strings used for settings page donation link
  • Change: Ignore some PHPCS checks that don’t apply
  • Change: Update and improve long description and numerous FAQ entries
  • Change: Note compatibility through WP 6.8+
  • Change: Note compatibility through PHP 8.3+
  • Change: Drop compatibility with version of WP older than 5.5
  • Change: Tweak installation instruction
  • Change: Update copyright date (2025)
  • Change: Reduce number of tags defined in readme.txt
  • Change: Remove development and testing related files from release packaging

2.0.1 (2021-05-30)

Highlights:

This recommended bugfix release addresses a potential conflict with other plugins that prevented the plugin settings page main content from being displayed.

Details:

  • Change: Update plugin framework to 063
    • Fix: Simplify settings initialization to prevent conflicts with other plugins
    • Change: Remove ability to detect plugin settings page before current screen is set, as it is no longer needed
    • Change: Enqueue thickbox during 'admin_enqueue_scripts' action instead of during 'init'
    • Change: Use is_plugin_admin_page() in help_tabs() instead of reproducing its functionality
    • Change: Trigger a debugging warning if is_plugin_admin_page() is used before 'admin_init' action is fired
  • New: Add new string (from plugin framework) for translation

2.0 (2021-05-12)

Highlights:

This recommended minor release updates the plugin framework, restructures unit test files, notes compatibility through 5.7+, and incorporates numerous minor behind-the-scenes tweaks.

Details:

  • Change: Outright support HTML5 rather than check for theme support of HTML5, since that isn’t relevant to admin
  • Change: Update plugin framework to 062
    • 062:
    • Change: Update is_plugin_admin_page() to use get_current_screen() when available
    • Change: Actually prevent object cloning and unserialization by throwing an error
    • Change: Check that there is a current screen before attempting to access its property
    • Change: Remove ‘type’ attribute from style tag
    • Change: Incorporate commonly defined styling for inline_textarea
    • 061:
    • Fix bug preventing settings from getting saved
    • 060:
    • Rename class from c2c_{PluginName}_Plugin_051 to c2c_Plugin_060
    • Move string translation handling into inheriting class making the plugin framework code plugin-agnostic
      • Add abstract function get_c2c_string() as a getter for translated strings
      • Replace all existing string usage with calls to get_c2c_string()
    • Handle WordPress’s deprecation of the use of the term “whitelist”
      • Change: Rename whitelist_options() to allowed_options()
      • Change: Use add_allowed_options() instead of deprecated add_option_whitelist() for WP 5.5+
      • Change: Hook allowed_options filter instead of deprecated whitelist_options for WP 5.5+
    • New: Add initial unit tests (currently just covering is_wp_version_cmp() and get_c2c_string())
    • Add is_wp_version_cmp() as a utility to compare current WP version against a given WP version
    • Refactor contextual_help() to be easier to read, and correct function docblocks
    • Don’t translate urlencoded donation email body text
    • Add inline comments for translators to clarify purpose of placeholders
    • Change PHP package name (make it singular)
    • Tweak inline function description
    • Note compatibility through WP 5.7+
    • Update copyright date (2021)
    • 051:
    • Allow setting integer input value to include commas
    • Use number_format_i18n() to format integer value within input field
    • Update link to coffee2code.com to be HTTPS
    • Update readme_url() to refer to plugin’s readme.txt on plugins.svn.wordpress.org
    • Remove defunct line of code
  • Change: Use plugin framework’s is_plugin_admin_page() instead of reinventing it
  • New: Add a recommendation for Add Admin JavaScript plugin to settings page
  • Change: Output the multiple tips on the settings page as a list instead of multiple paragraphs
  • Change: Prevent appending newline to value of setting passed to filter unless an actual value was configured
  • Change: Move translation of all parent class strings into main plugin file
  • Change: Tweak conditional checks to be more succinct
  • Change: Ensure there’s a current screen before attempting to get one of its properties
  • Change: Omit inline styles for settings now that plugin framework defines them
  • Change: Output newlines after paragraph tags in settings page
  • Change: Note compatibility through WP 5.7+
  • Change: Update copyright date (2021)
  • Change: Change plugin’s short description
  • Change: Tweak some readme.txt documentation
  • Change: Tweak some inline function and parameter documentation
  • Unit tests:
    • New: Add tests for JS files getting registered and enqueued
    • New: Add tests for add_codemirror()
    • New: Add help function get_css_files()
    • Change: Restructure unit test directories and files into tests/ top-level directory
    • Change: Remove ‘test-‘ prefix from unit test files
    • Change: In bootstrap, store path to plugin file constant so its value can be used within that file and in test file

Full changelog is available in CHANGELOG.md.