• Skip to main content
  • Skip to primary sidebar
  • Skip to footer

nSiteful Web Builders

Building a Better Web - One Site at a Time.

  • Home
  • About
    • Testimonials
    • Resources
    • Partner With Me
    • Frequently Asked Questions
  • Web Sites
  • Online Marketing
  • WordPress Support
    • Customized WordPress Training
    • 60-for-60 Sessions
  • Web Applications
  • Blog
    • At-A-Glance
    • Blog Articles Grouped by Category
    • Case Studies
    • General
    • Portfolio
    • Reviews
    • Snippets
    • Techniques
    • Projects
  • Contact
    • Purchase Retainer Consulting Hours
    • About Retainer Consulting Hours
    • Book a Meeting with Jeff
    • Tell Me About Your Web Project
    • nSiteful Newsletter Archives
    • nSiteful Rewards

By Jeff - 5/28/2015
Cats: Techniques · Tags: Child Themes, mu-plugins, WooThemes, WordPress

techniques

Customizing WordPress Using Vendor-Built Child Themes

Last updated October 10th, 2018 at 08:10 am

customizing-wordpressAlmost without exception, whenever I build a WordPress Web site using a theme that could be updated in the future, I create a child theme and use it as the basis for the site. As I try to explain in this post from May of 2012, the child theme method effectively ensures that the modifications I make are preserved when the parent theme is updated. The child theme method is also a great way to stay out of the kind of trouble you can potentially get yourself into by messing with parent theme files.

Except for…

One exception is when I’m building a site based on what I’ll refer to as a vendor-built child theme. Examples of such child themes are all of the StudioPress themes (which are child themes of the Genesis theme) and the child themes of the WooThemes Storefront theme.

Since StudioPress’ child themes are (supposedly) never updated, they represent a unique class of vendor-built child themes. So let’s focus on WooThemes’ Storefront child themes — which can be updated and are.

The child theme method doesn’t work so well when customizing WordPress sites based on vendor-built child themes. If I make changes to a Storefront child theme’s functions.php or style.css files, those changes will be overwritten when the child theme is updated. Not good.

What to do?

Grandchild Theme?

A tempting approach might be to create a child theme of the child theme &mdash or a grandchild theme. Although this is possible, it is not recommended (here and here, for example).

Grandchild themes are not natively supported by WordPress, and they add levels of complexity and opportunities for problems to arise.

A Better Way

Here’s the approach I just implemented for a WooThemes Storefront child theme: I place my customizations in the site’s mu-plugins directory.

Suppose I want to add some new CSS rules. I will create a css file (call it custom.css) and upload it to the mu-plugins directory.

Then I’ll create a php file (call it functions.php) with the following lines of code and upload it to the mu-plugins directory.

Here’s the code, which utilizes a few WordPress functions/hooks:

function nwb_enqueue_scripts() {
	wp_enqueue_style( 'nwb', plugins_url('custom.css', __FILE__) );
}
add_action( 'wp_enqueue_scripts', 'nwb_enqueue_scripts' );

Note: Instructions in php files stored in a site’s mu-plugins directory are automatically read and excecuted (in alphabetical order) before normal plugins and before the theme’s functions.php file. Therefore, the above script effectively adds the custom.css style sheet to the head tag of every page of the site before any other theme- or plugin-related style sheets. If I want custom.css to load after another style sheet (e.g., after the main style sheet for the theme), I would include the optional third “dependencies” parameter in the wp_enqueue_style function.

Reference information on WordPress functions/hooks:

  • wp_enqueue_style()
  • plugins_url()
  • wp_enqueue_scripts()

Comments Welcome

I concede that my mu-plugins approach for customizing CSS swims against the tide of conventional wisdom on the plugin vs. functions.php debate.

I welcome your comments. How do you handle customizations for Web sites based on vendor-built child themes?

Like what you see? Share with others and join my mailing list. No long-term commitment, unsubscribe any time.

Related Posts

  1. NextGen Gallery Compact Album Mods
  2. What are WordPress Post Formats, and why should I care?
  3. Display WordPress and WooCommerce Tags as Lists
  4. Child Themes – WordCamp ATL 2012 Presentation
  5. What to look for in WordPress themes: Pluggability

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Primary Sidebar

mailchimp signup

Subscribe to get notified when new articles are published. Unsubscribe any time. No spam. I promise. Check out my newsletter archives.

social

Twitter Facebook LinkedIn

Recent Articles

  • Post-Specific CSS for WordPress October 5, 2026
  • You built an online course, but they haven’t come. September 16, 2026
  • Custom MemberPress Pricing Pages December 19, 2025
  • CSS Data Attribute Override December 11, 2025
  • MemberPress Rules Using Custom Taxonomies and Custom Roles December 10, 2025

Filter By Category/Tag

Categories

  • Case Studies (8)
  • For Staff (1)
  • General (73)
  • Portfolio (7)
  • Reviews (14)
  • Snippets (24)
  • Techniques (52)

Popular Tags

Advanced Custom Fields Blogging Child Themes Content Marketing CSS Customer Service Custom Fields Custom Post Types Diagnostics Domain Names Facebook FooGallery Genesis Hosting HTML Images iPhone Libra Live Chat Marketing Media MemberPress MemberPress Courses Membership Sites Mobile-Friendly MySQL Photo Gallery php Pinterest Plugins Post Formats Pricing Project Management SEBA SEO Seth Godin Shortcodes Social Networking Surveys Taxonomies Twitter Video Web design Web forms WordPress

Footer

Background

Web Sites | WordPress Support | Web Applications.

Formally trained in liberal arts and education (I have a B.A. in Government from Harvard and studied Secondary Education at Rutgers Graduate School), I have honed my skills in the communication arts and sciences as a teacher, trainer, instructional designer, writer, photographer, calligrapher, helpdesk manager, database programmer, and multimedia developer.

(I've also been a group counselor, waiter, bartender, bicycle messenger boy, computer salesman, carpenter's helper, financial analyst, and school board president.)

Tech

Systems since 1983.
Web sites since 1994.
PHP since 2001.
WordPress since 2007.

Contact

Book Meeting
770-772-5134
Email Jeff
Send Money
All Ways

Copyright 2026, nSiteful Web Builders, Inc.

Cookies Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
  • Manage options
  • Manage services
  • Manage {vendor_count} vendors
  • Read more about these purposes
View preferences
  • {title}
  • {title}
  • {title}
https://iframe.mediadelivery.net/embed/392008/42d18bc1-2adc-4741-b733-053d08d09c32
https://vz-000c5976-3ab.b-cdn.net/42d18bc1-2adc-4741-b733-053d08d09c32/play_720p.mp4

Receive occasional emails from Jeff