What Do You Really Need in a WordPress Starter Theme?

I think it’s safe to say that I’m somewhat obsessed with themes that help you get your WordPress projects started quickly. Most likely because I’ve been there, staring at an empty project folder wondering where I should begin. Well, you shouldn’t have to stare at that empty folder for any project. Even when you’re starting from scratch you’re probably not really starting from scratch, right? You’re taking an existing WordPress theme, either your own or someone elses, and hacking at it until it’s something new. That theme is your Starter Theme.

But not all Starter Themes are created equal. If you’re using the same theme again and again and always adding the same code to it, well, shouldn’t that code always be in there in the first place? Or how about the reverse? If you’re always cleaning out the same code from your theme is that really a great starter theme? Should it have sample theme options? Or a CSS reset? Basic styles? How much style? A grid system? … The questions could go on for a while.

So, what are you using for your Starter Theme? And what do you think you really need in a WordPress Starter Theme?

43 thoughts on “What Do You Really Need in a WordPress Starter Theme?”

  1. Hey Ian…

    I have my own vanilla theme that is a single file with no styles, an ‘_inc’ folder (with images, fonts css and scripts) and a stylesheet.

    In the single index.php file I have links to my libraries and common files: stylesheet, HTML5 modernizr, web-fonts.css, page_scripts (my own most used scripts), lightbox (or similar) some other bits I use all the time and a single loop.

    I tend to comment out the loop and style the page with CSS then introduce WordPress part by part… When I need a new page template I create one only when needed and only add comments when needed etc. I find I end up with much less code this way. Sometimes I only end up with a few template files too with conditions for post_types which feels really nice.

    Be good!

  2. Right! I also added in some less.js, which I’m not sold on yet, and added in Dan Cedarholm’s .group (clearfix) hack. Having clearfix built in is certainly essential, I think.

  3. The most important aspect of any “starter” theme is its documentation. It should be clearly written, simple to understand, and includes examples where possible.

    Starter implies a basic structure with a clean, uncluttered look and feel.

    The “code” can be as involved or as simple as the developer wants, but I would suggest all but the “basics” be appropriately commented out with complete and easy-to-follow instructions on how to implement what is not used by default.

    The “style” should follow suit with the “code”, especially in regards to examples.

  4. So agree that if you’re always making changes to a starter theme it’s not a good use of time. I’ve been creating my own Frankenstein starter theme from a ton of resources – started with Starkers (http://starkerstheme.com/) and then have just pulled in a whole kitchen sink of other stuff (resets, default styles, adding styles back in, cool bits and pieces from boilerplates, etc.).

    Every time I work on a new theme, I try to take the best of what I’m changing and adding (and the most widely applicable to other sites/ themes) and put it back into my starter.

  5. I’m a big fan of the HTML5 Reset WordPress theme. It can seem a little bloated, but that’s the tradeoff with any of the HTML boilerplate-based stuff.

    However, the one thing I always undo (and have no incorporated into my own version of the theme) is a really well-commented functions.php file with snippets for menus, sidebars, enqueueing scripts, add post thumbnails, etc.

    In style.css I’ve added a lot of property-less class selectors that I always end up using.

    I like the thinking behind @Rob Hadfield’s approach, and will need to think about the avantages of that some more, but I guess I prefer to start with a lot and liberally delete, rather than returning to the codex ad nauseum to remember stuff like the order of the arguments of wp_enqueue_scripts.

  6. @Mark Root-Wiley, please don’t think I torture myself writing from scratch every time haha, I do have a library of functions and code snippets I call on – I just don’t include them all straight away. It helps me think straight 🙂

  7. Funny you should ask Ian, as I’m just whipping my own starter theme back into shape as I’m about to start a new project. I started with your Toolbox theme a year or so ago and then threw in a bunch of functionality I’d built in various places. I’ve been iterating on it by asking myself, as I start a new project “what new thing did I do on the last project that could be useful on this one?” Then I add it.

    The starter theme becomes a bit of a kitchen sink from which I’ll remove the stuff I don’t need rather than hunting for stuff I need.

    Some stuff in mine:

    a setup for writing CSS via Sass/Compass
    code to modify WP’s menus to stop its insane markup diarrhea
    code to lock down the visual editor to only the HTML elements the client should be using.
    the beginnings of an alternate template hierarchy. Think Carrington lite.
    JS I use all/most of the time. Modernizr, Respond.js, Cycle.

  8. We’re in the middle of building our own internal base theme for our own projects at Lincpin. Instead of thinking about it from a (What structure should a base theme have?) We have gone about it a different way.

    What content do we want to pull in dynamically every time and standardize. Things like Client Info (name address, contact info email and phone numbers) Utilize Typekit? Input the kit id, using google, input the UA-XXX etc. Also Admin display items; cleanup the dashboard, clean up the menu (hide the links, hide settings depending on the client etc). We also have a functions.php that has been fully commented along with default items like enqueue_scripts and styles.

    Excited to see what you come up with here.

  9. I have been using http://html5reset.org/#wordpress and stripping it down a bit as well as keeping a separate library of functions (commented, menus, widgets, etc).

    For me it really depends upon the complexity of the site which files should be in their to start with so by using html5reset it is is easy to delete a few lines/files here and there then trying to figure the best skeleton to work with from the ground up.

  10. I’m working on building a commercial theme shop, and am in the process of building a starter theme that will be the foundation of all my shop’s themes.

    I spent days researching the dozens of “frameworks” and starter themes out there. Bones, Roots, WP-Framework, Foundation, Boilerplate, Build, Scherzo, Skeleton, et al.

    What I’ve ended up with was a blend of Toolbox and the Options Framework by Devin Price, plus my own hand-rolled responsive solution with some cutting-edge HTML5 goodness baked in.

    Now that I have all the pieces in place, I’m trying to strike that balance between nothing left to add and nothing left to subtract.

    I feel like it’s important to have something that out-of-the-box completely passes the Theme Unit test on the front end, has a clean WP_DEBUG, passes scrutiny by Pross’ Theme-Check plugin, has minimal styling, and, for Theme Options has some basics plus a one-of-each-type generic options set to copy/paste/edit. Anything less than that isn’t enough to start with, and anything more than that will likely have to be pruned back on every new project.

    Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.

    -Antoine de Saint-Exupery

    1. Nice. This reminds me of the quote I currently keep in the tagline of my local development install …

      “Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it’s worth it in the end because once you get there, you can move mountains.”
      — Steve Jobs

      1. Haha. I think @Rob Hadfield has a very good quote to plaster on my office walls! Ultimately, I think everyone tends to agree that we all just need something we can use.

        By the way, I am totally going to “steal” your commenting design concept. I love it!


    2. I just starting writing my first commercial theme and am starting in a very similar spot by adopting Mr. Price’s options as well.

      I’d love to hear more about where you’re heading… Where can I found out when you launch?

    3. this is eactly the kind of theme I”ve been putting off creating for a while. I just keep using the Genesis framework for new sites, but it’s not HTML5 yet.

  11. What I really want from a starter theme is a sensible folder structure that you would knew what to put where, and more importantly, help you build what you have in mind without getting in your way.
    I’m a big fan of Gantry framework, and it comes with a starter theme which has everything you’d need in it. I recommend you check it out!

  12. I’m using default on my blog.

    I’m using a fairly bland template on my biz site:


    I used to use Atahualpa on my personal blog. But, everyone said it was ugly. So, I yanked it and went back to default. 😦

    Wish I could find something that looks good and is easy to set up.


  13. StartBox is my starter theme. I began with Sandbox, in the days when it was new. As you described, I found myself making the same edits time and again. So, I committed them to the core and renamed it to StartBox, because it was my starter theme and based on Sandbox.

    It’s come a LONG way since then, and still has much growing left to do. Since 2010 I’ve been using it as a parent theme framework, so my new starter theme is actually a rudimentary child theme, with only a functions.php and a style.css. The functions file has some functions commented out for me to use or delete, depending on my needs, while the style sheet has empty selectors for all of all default (and most commonly) styled items.

    The result is an ability to crank out any kind of layout and design I want in almost no time and with little to no markup.

  14. I have just finished a website built on bareskin (https://github.com/madalinungureanu/bareskin), but I am not entirely sold on it yet.

    For my next project I am going to use Genesis, but I cannot say anything about using that yet as it will be my first time.

    My ideal starter theme would be fully internationalized, not have an options panel (or a very very basic one at the most), a few separate style sheets, a bunch of different widget areas.

    I do not care much about HTML5, so if it is there fine, if it is not then I’m ok too.

    And regarding the new hype-word “responsiveness”, for me that can be left out altogether as without gives me much more flexibility on how to implement things for mobile browsers (if at all needed/wanted/wished for).

  15. Hi Ian,
    Your Toolbox theme is almost perfect already 😉
    What I think personally is most important is to keep it plain and simple, just like Toolbox. Most starter themes of frameworks are overkill I think. Adding way too much functionallity and too much custom coding. What’s the ower of a framework or starter theme if one has to learn a whole new theming approach of theme functions? I love to keep it plain and simple and just use WP plain code and functions.

    One thing I would love to be added is all possible custom page templates.
    Left col / right col / 3 col / full width / sitemap / list posts / list pages / etc.

    Thanks! I’m curious what’s coming!

  16. Some ideas:

    Sample theme options would be great, possibly also as (or in addition to) reference/guidelines to build the options interface the WP way. I feel that theme options are too much diverse between vendors, maybe an official recommendation with examples could help mitigate the issue.

    I would add a customized and extended (widgets components for example) version of Twitter Bootstrap as a front-end foundation, i point to TB because in my opinion is the more complete and has a great team behind.(A starter theme would probably have its amount of css so why don’t take the opportunity to ease front-end developer life).

    While I agree with the keep it simple philosophy my experience is a simple solution in this case always need a lot of additions that could be integrated directly, so go the extra miles adding a mini options framework and a front-end library could be wiser than it sounds 🙂

  17. I’ve fallen in to using woothemes ( http://woothemes.com) Canvas as a starter for many projects. There is extensive documentation and the ability to adapt parts of it easily. Granted, I’ve been using the Woo Framework for quite a while and I am very comfortable with it. I have a set of my own functions that I reuse frequently with this theme.

    1. I agree with Andy.
      Not to say I do not like Toolbox theme however Handycrafted theme is easy compare to Toolbox.
      I kind of focus on design instead of loop coding.
      But I think Toolbox should be well documented in wordpress.org codex.

  18. I’m also a big fan of Startbox. I came into WP dev with a long history of coding php/mysql sites by hand, so I really appreciate the extensive hooks in Startbox that let me whip things up and then drop them in where I want them.

    I’m also really digging the theme options API that makes it really easy to make my own options specific to a site.

  19. When developing a new website, I’m rather lazy. I want to squeeze my Photoshop layout in a ready template. I want that template to cover a standard set of WordPress tags and functions that is sufficient for a well functioning blog. A given file structure (not too complicated, please) is great, as I tend to forget to add one or the other file that comes in quite handy like a 404.php. Having the same files and folder structure in a couple of websites makes it easier to maintain them.

    Once I said I’m lazy you’ll understand that i don’t want to go through dozen of options to decide wether I’ll need them or not. I’m good in complicating things myself, I don’t need a Starter Theme for that. Keep it simple, please.

    I also don’t need an options page in the backend (as you find them in many frameworks) that let’s me decide between “sidebar left or right?”. I’m lazy, but–well, not that lazy. And I hate it to be infantilized by a framework, where it takes more time to get rid of stuff I never needed.

    Add lot’s of comments so I know what part I can comment out or even delete. Don’t forget a introductionary readme file. Keep it rather simple. Use standard template tags and built in functions and rather less proprietary theme functions as I will need to understand each of them to decide wether I’ll need it.

  20. Toolbox is a great starter theme. Please keep up the great work. I combine HTML5 Boilerplate with Toolbox to get me jumpstart a project.

  21. I currently use the stripped version of your starter theme, Ian. I cleaned it up a lot as it was kinda messy – especially when interacting between programmer and designer, and added additional folders for “Administration”,”frontend” (for unique control structures – think MVC design), “Widgets”, “Shortcodes” and, when needed, “Profiles” (For custom profile functions outside the core.

    The extra folders let me easily add specific code for functions and call them within the functions.php using conditionals (is_admin(), capabilities) all the while keeping the functions.php nice and clean.

    This approach also lets me create unique classes in an easy to locate directory and file, such as custom tinyMCE buttons. It saves me from having to run a search on the functions.php and also keeps code out of the functions.php unless it needs to be called, reducing the file size.

  22. I start with toolbox child theme, put in a stripped-down yui reset, clearfix, adjust 404 styles, and the rest is content-specific. I’m intrigued by the underscore theme, but have 3 or 4 sites that I’d like to continue to use the same theme with, so I’ll probably stay with toolbox for a while, glad it’s going to continue to be updated. I did find myself getting rid of many options that were more blog-specific, because I’m working with something that presents more as a website, and doesn’t need some of those options. With more time I’d do it in a more efficient way!

  23. That is, my friend, was a simple short and funny story for me. For I’ve been messing around my own starter theme in hoping that I will be using the better version of it on my next project. It was never be good enough.

    My goal, is someday I will only just adjusting the CSS without even looking around the functions.php and a whole lot other files.

Comments are closed.