I build custom Genesis child themes for most of my clients. Rather than starting from an existing StudioPress theme, I use my own starter theme: EA Genesis Child.
What is a starter theme
A starter theme is a base upon which you can build your own custom theme. They usually have minimal styling and contain the features and functionality you use on every site you build.
I recommend you check out StudioPress’ starter theme, Genesis Sample, in addition to mine. After you’ve built a few Genesis sites you’ll likely build your own starter theme structured to your liking.
My starter theme includes
SASS for Styling
Rather than one long stylesheet, my styles are broken into smaller SASS partials for a cleaner organization. I also use variables for key settings (colors, column widths), mixins for helper functions, and dynamically generate styles.
Gutenberg Ready
The theme includes theme support for new Gutenberg features. It also compiles a separate stylesheet so the editor matches the frontend display.
Accessible
Genesis can be made more accessible by enabling the accessibility features.
Template partials for archive pages
See this article for more information.
Login Logo
The site login form displays the client’s logo (example)
Miscellaneous performance improvements
Like minimizing classes on nav menus and posts and removing avatars from comments.
Jon Brown says
Wow, thank you for sharing this. If I’d seen it last week it would have saved me heaps of time this week with Custom Post Types and Custom Meta Boxes alone.
My custom child themes getting more advanced with each project and I really like the way you’ve got it all organized… it’s a huge help and as a bonus I like that you write code the way I do (lots of echo statements not lots of )
Bill Scheider says
Hey Bill,
This is great. Thanks so much for sharing. This gives me ideas about how to set up a child theme with code that I use over and over. A real timesaver.
Keith Davis says
Hi Bill
Came over from one of your comments over at Studiopress.
I’ve just bought the developer version of Genesis and have started playing with it on a local install.
I get by with html and CSS but PHP has defeated me so far.
Just checking out the senior moderators websites to get a feel for what you do.
Niall O'Brien says
Hi Bill, just wondering how you go about developing custom taxonomy templates using Genesis?
Thanks in advance.
Bill Erickson says
You create them just like any other WordPress theme. Refer to the Template Hierarchy.
If you have a custom taxonomy called “Color” and terms “red” and “blue”,
Tom says
Bill, Great Site! Thanks for sharing.
I noticed your base child does not have a home.php file. So am I to assume you create a static home page? I am trying to figure out if it is easier for a client to update widgets in a home.php file or use the editor on a static page-home.php template.
I am interested in your thoughts.
Thanks
Thanks
Bill Erickson says
Here’s my typical process:
– If a homepage is supposed to be a listing of blog posts, I don’t do anything. This is the WordPress default.
– If the homepage is a static page, I go to Pages > Add New and create Home and Blog, then go to Settings > Reading and set Home as the front page and Blog as the posts page.
– If the homepage has homepage-specific customizations, I then create a front-page.php file where they all go.
Here’s a blog post I wrote on developing a child theme that shows how I use a front page: http://www.artofblog.com/building-a-genesis-child-theme/
Tom says
WOW Bill, that is exactly what I was looking for. I recently purchased the Pro Package from Genesis and I have been weeding my way through it. I know enough PHP to get myself in trouble and thanks to people like you I am learning something everyday.
Cathy says
I get all the logic for the first 2 points, but on the 3rd – if the home requires a lot of customization, why do you use frontpage.php and not home.php?
Bill Erickson says
home.php only applies to the blog page. In the above example, we set the page “Home” as the front page and the page “Blog” as the posts page. home.php would control Blog, and front-page.php would control “Home”.
Cathy says
So home.php only controls the ‘posts page’? I didn’t know that! Using front-page.php is much more client-proof then! Thank you!
Jeffrey says
Quick question regarding child themes. I know in regular WP sites you can use Headspace2 to switch the theme look on specifically assigned pages. Is there a way of doing this with Genesis and It’s child themes?
Thanks!
Bill Erickson says
I’ve never heard of Headspace2 so I’m not sure how it works, but if it works with other WordPress themes I would expect it to work with Genesis.
Cathy says
This is great! Thank you.
Cathy says
I read the tutorial in the Art of Blog post you wrote, and you have a rule of thumb for where to put code – styles in the theme, functions in plugins. (sort of, you said it nicer). But I’ve been wondering about Custom Post Types and taxonomies, I add those to teh THEME functions file – And I’ve been wondering about the client’s future needs – they’re kinda stuck with that theme or me or someone who knows how to develop CPT in the future which isn’t the way I want to do things, but I dont know another way to do it. What do you suggest?
Bill Erickson says
I actually described this just the other day in my Core Functionality plugin post.
For things like custom post types and taxonomies – things the client would expect to keep even if changing themes – you should put in a plugin. I create a plugin called “Core Functionality” on all sites which contains this stuff.
Even better, create a folder inside wp-content called mu-plugins (this stands for must use plugins), then drop the contents of the core-functionality plugin in this folder (you can’t have plugins inside of folders in this directory, so you have to pull it out of the folder first). This will make it so the plugin is always on and can’t be turned off. You don’t want the client disabling their core functionality plugin, losing their site’s core functionality, and calling you to fix it.
Cathy Tibbles says
I’m using your theme to learn how to edit the Genesis admin page, and the custom meta boxes are working great – but neither the core genesis defaults nor the child ones are registering. I’m wondering if this is tested?
Is the call to setup default settings too late in the game when included in the genesis setup hook? I’m grasping at straws here – but what about the init hook (for either WP or Genesis)?
Its this bit I’m wondering about: (which is within the Genesis_setup hook:
// Setup Theme Settings
include_once( CHILD_DIR . ‘/lib/functions/admin.php’);
Bill Erickson says
At the moment, the base child theme has admin code that only works if running Genesis 1.8 (not available yet). I’m currently working with StudioPress to test this code before it is released. So if you’re using the most up-to-date code from github (in /lib/admin/child-theme-settings.php) it won’t be usable. But since you reference /lib/functions/admin.php it doesn’t sound like this is the issue.
No, this must run after WordPress and Genesis have been set up or else the genesis-specific hooks won’t be available yet.