Creating the WordPress Theme Development Course — a play by play

We’re creating a(n opinionated) WordPress theme development course! All you’ll need is a working knowledge of HTML, CSS, and WordPress.  

We’ve wanted to create this course for a while now. However, we always wanted to launch it under the We Start With Good umbrella, so we had to get that launched first. 

Now that WSWG has been live for just over 3 months, we’ve published 14 (!!) articles, and have the beginnings of a mailing list, it’s time to create the course!

On March 23rd, we created a draft of the course outline (it has already changed a bit as we’ve written the course), set a launch date (May 3rd!), and came up with a small plan.

We want to document the process of creating this course – which will be the very first product we’ve ever created – for two reasons:

  1. So we have something to look back at, and
  2. Because we’ve learned so much from watching other people create in public.

This post will be a play-by-play of our progress and we’ll be continuously updating it. If you’d like to know when new content gets added, sign up at the bottom of this article to receive updates.

Why We’re Creating this Course

I (Aurooba) attempted to learn WordPress and found the information very disjointed and confusing out on the web. Eventually, a web developer I used to follow (Zoe Rooney) created a small WordPress Theme Development course which I decided to take. That course, with its clear approach and easy-to-grasp explanations, gave me the foundation I needed to confidently develop themes. Zoe no longer works as a web developer and the course stopped existing many years ago.

But I still remember how awesome that course was and nothing like that quite exists now. I’ve checked out other courses but they are either too slow-paced, don’t cover everything, or force you into more advanced topics first that go over your head… and then you drop the ball.

So we decided to create the course we wish existed. The fun part is, Bobbi is part of the target audience of this course, so we’ve got a built-in person who can test the course and tell me if something is weird or missing or confusing.

About the Course

  • The course doesn’t have an official name yet. Right now we’re just calling it the WordPress Theme Development course. But this will likely change.
  • This course is a beginner to intermediate course. It assumes you have little to no PHP knowledge and walks you through the concepts and syntax. The goal of this course is to have people finish the course, confident in their theme development skills, with the tools and knowledge to keep advancing those skills.
  • We’re hoping to price it somewhere between $99 and $250 at first. It’s going to be a jam-packed course – right now we’re estimating that it’ll come in at around 40k words. But we want to keep the course affordable and accessible to beginning developers.
  • It’s primarily a text-based online course. We’re hoping to add complementing videos if there is time. But if there isn’t, we’ll launch it without video and add a video tier afterwards. (The version that includes video will be priced higher than the text-only course.)
  • It’ll always be for sale. At this point, we don’t think it’ll be one of those courses where there’s an enrolment window. It’s a self-paced course and we want people to be able to buy it whenever they want.
  • There will be free updates to the course. Change is afoot in WordPress land, and we’ll update the course accordingly and those updates will be free to anyone who has already purchased the course.

Here’s the Plan

Create the course outline

We’ve already done this part. It’s not a very verbose outline, it covers the big high level topics we want to cover in the course. It has already changed a bit since I’ve (Aurooba) started writing the course – I’ve shifted around the order of some things and added new topics that I realized we definitely have to cover. Here’s a screenshot:

Write the course

I (Aurooba) don’t if this is just crazy enough or way too crazy, but I want to try to finish writing the course by April 20 at the latest. How did I come up with that date? Well, I calculated that if I wrote an average of 2000 words a day starting March 26, I could write 38k words by April 20. 

And yes, that was how long I estimated the course to be. After writing the first lesson (which came in at about 3600 words pre-editing, I think I’m pretty on point).

Ideally, if I can get this done faster, that would be better. Today (March 28) I’ve written 1500 words so far, and I’m hoping to write another 1500, bringing my total to 3000. I think it’s a good pace — it keeps up the momentum without getting too overwhelming.

Edit the course

After Aurooba finishes writing a lesson, she assigns it to me (Bobbi) in Todoist. I go in and edit it, sometimes making suggestions, sometimes direct edits, and sometimes adding comments. Since Aurooba loves to write at night (she is much more of a night owl than I am), so far I’ve been doing edits the next day.

There’s more! Since I am proud to be of the exact target audience for this course, I am also actively taking the course as I edit it (Aurooba used the phrase ‘built-in person’ which I find altogether amusing, accurate, and awesome). This means I’ll be able to catch any confusing explanations or gaps, and test out the experience as a whole. 

I’m creating a live journal of the journey here!

Design some course elements

The course will live right here on We Start With Good, so we don’t need to make a complete website, but we do need some branding and design elements for the course. We also need to design how the courses area will look – there are some little features we want to add that will make learning from the course easier. 

I (Bobbi) have done a quick edit of the first big lesson today, and it’s given me a solid understanding of the design elements and features that need to be created. I’m hoping to get started on all of this tomorrow (March 29). 

Develop the required course functionality

This week (Mar 26 to Mar 30), I (Aurooba) want to focus purely on writing, but starting next week, I’ll start to incorporate some development tasks into my day. I’ve already done some thinking about how the admin for all of this will work, and we came up with an overall plan for how the purchase flow will look.

We’re going to DIY this with some CPTs and Gravity Forms instead of using an LMS or e-commerce software. Once we make some money from the course, we’ll use the first bit of profit to buy the plugins we want to use on a long-term basis for our products.

Write, design, and develop the sales page

This will be hard work but also exciting work. Our approach (forever and always) is content first, so we’ll create the content for the sales page and then do everything else. We want to have at least the first 4 lessons written and edited before we touch the sales page.

Marketing and promotion

We have a small mailing list for Wanderoak and the beginnings of a list for We Start With Good. We’ll be emailing both lists about the course when it’s available for sale. 

This page itself serves as a marketing tool, since we’re actively talking about the course. My (Bobbi’s) live journal also becomes part of marketing. We’re coming at it all from the perspective creating in public, but marketing is undeniably a perk of doing so.

We’re also sharing updates on Instagram stories, Twitter, and Facebook. Most of this is pretty stress free and just something we can do a little bit when it comes to mind. Aurooba uses Instagram stories a lot to document and share her life, so for her this is something she’d be doing anyway, whether we were writing this course or not.

Salesy, sleazy, annoying vibes are not our style. We’re super stoked about this course and that means we naturally want to talk about it, and so we do! The launch will be super casual, just like every other ‘launch’ we’ve ever done, including the launch of We Start With Good.

April 3rd 2018 morning


We’re up to almost 7000 words! I wanted to write 3000 words yesterday but I didn’t make it. Got distracted by some other stuff. But we’re still making good progress (hoping for solid progress today). Bobbi created an announcement image, so we added an Instagram post to announce the course on both the Wanderoak account and the We Start With Good account!

We have a few people consistently watching all the behind the scenes Instagram Stories about the course, so that feels like a good sign and is added motivation!

I ended up rearranging the outline again while working on the second lesson. I realized that the lesson about the functions.php file has to be split up into two parts. One introductory lesson that will become the third lesson and then a more in-depth and slightly more advanced lesson that will stay at the original lesson 6 mark.

We decided (for now, but possibly permanently) that our course terminology is Course > Section > Lesson. I’ve personally been using the word module, which I still kind of like better, but I don’t know if that’s because in high school we had modules and I’m used to that or because I think it’s a better descriptor.

I’m hoping to report tomorrow that I successfully wrote 3000 words today. That would make me really really happy.


When we originally launched We Start With Good, we made sure to get it done. That meant purposefully not designing a full website with all the bells and whistles in anticipation of what we hoped to accomplish. No, instead that meant designing and developing the website we needed to easily publish helpful articles that are pleasant to read. 

There is no complexity—we have an article index that displays as a list, and the articles themselves. The menu just links back to the list. Here’s a snapshot (for when we make updates, and the site doesn’t actually look like this anymore): 

We Start With Good Website Snapshot April 2 2018

This has served us very well so far! However, it’s a bit too simple to host this course we’re building. Updates are in order, and I’ve started to work on them. We need things like a course page, design that supports the buying process, a way to navigate within the course, a way to login, and a way to make it clear when you’re inside a course lesson (as opposed to a regular article). 

As with they way we created WSWG in the beginning, we’ll be creating what is required to make the WordPress theme development course run well, without going over-the-top trying to anticipate every little feature. 

We’ll get it done, and get it done well.

April 11, 2018 Morning


Site Development

Bobbi fleshed out some of the design elements we need for the course section of the website and it was my plan to start developing it starting today. However, I got excited and had some thoughts, so I started building it yesterday. So far it’s going super well!

My original plan was to create some CPTs (Custom Post Types) and run the whole thing using Gravity Forms and some permissions, and then later on switch to Easy Digital Downloads instead of some DIY permissions and such. However, I decided that this was a level of headache that I wasn’t interested in having. So I decided to use Easy Digital Downloads from the get go.

Easy Digital Downloads is free, however, some of the extensions have paid licenses (which give you access to automatic updates and support). I’m not ready to pay for those things yet, so I have not purchased a license for them. The 3 extensions I’m using are:

We’ll be buying the licenses later this year so that we do have automatic updates and support (and because Pippin and his team are awesome, so we want to support the development of these great products), but the time being, this is completely legal (EDD and its extensions are distributed under the GPL 2.0 license) to do so I’m doing it.

I’ve set up two different CPT’s: Courses and Lessons, with some nifty rewrite rules and connections so that Lessons can be set up as children of any course. I just chose a couple dashicons from the default WordPress set that felt right, for now.

I definitely want to do a tutorial at some point about how I set this up. It’s pretty cool and I’m very pleased with how it turned out. I took inspiration from a few tutorials I saw around the web but ultimately ended up creating a customized solution of my own.

The admin for these CPTs is not completely done but the basic functionality is there. When you create a new course right now, there’s a title field and an ACF Relationship field which only allows you to chose Lessons which are the children of this course. Here’s a screenshot from my development site:

In order for this to work, you have to create your course first and then save it. When you open up a lesson, you are able to choose the Course from a custom dropdown I set up, which then makes the lesson a child post of the chosen course:

Once the lesson is assigned to a course, it shows up in the Lessons field on the course edit screen. This allows us to easily order the lessons (I could have used the built-in menu order functionality for this, but this is just so much simpler and intuitive).

My inspiration for this set up came from LearnDash, which we used for a client’s project. But LearnDash is way too intense for what we’re creating here, and this entire setup only took me about an hour to do.

So that’s where I am at with the development side of things. Very solid progress, I’d say!

Course Writing

I’ve got about a third of the course written (3.5 lessons), which so far has clocked in at just over 10k words. I definitely haven’t been able to write as fast as I’d like, because of some client work and other things that have been happening in the business. But I don’t feel too far behind, which is good!

May 1, 2018


Course Design Elements

I spent some time today designing some of the course elements we need in order for the course to be usable (and a few things we wanted in order to make it nice to use):

  1. Lesson Sidebar—a list of all the lessons in the course; makes it easy-peasy to see how far along you are in the course, open up a previous lesson to check something, and continue on to the next lesson. 
  2. Mini Lesson—scattered throughout the lessons are mini lessons on various subjects, including PHP and SEO; they’re related to something going on in the lesson, and give a deeper understanding of why something is the way it is.
  3. Forms—we want students to be able to easily get in contact with us (plus we also needed payment fields!)
  4. Definitions—we’re working on adding a handy tooltip-like definitions feature so we can give some added info without constantly breaking up the flow of the lessons.

Here’s a little sneak peek of those features:

(Points it you noticed the pirate ipsum, my filler text of choice these days! Quadruple points if you can guess what the rest of my definition was for brains…)

A few things to note: 

  • These are drafts; by the time they are built out, they’ll likely have a few modifications.
  • I sometimes include hints within the designs for what style I’m using to make things easier for Aurooba when she’s developing (see Lessons (H3) in the top-right corner).
  • There are more elements that I’ve designed (think dashboard, popup) and haven’t shared here. And I have no doubt that more things that require designing will come up before launch. But this is all about go-with-the-flow, so I’ll keep designing as needed.

May 26, 2018


Alright! So it’s been a while since an update. Doing an update has been on my list for about a week now, and I’m finally getting to it this lovely Saturday night. I had to take a large break from writing while we focussed on some intense work for a couple of clients. But I’ve gotten back into it last week!

I’ve decided to write every week day for 1 hour, first thing in the morning, before I do anything else. So far, it’s worked out well! I finally finished Lesson 4 (which I knew would be one of the harder lessons to write) and I’m about 1/8th of the way through Lesson 5 (which is going to be pretty long, since I’ve got 6 sub topics to cover), but I’m hoping to work on it a little bit tonight – I would love to finish writing it by Monday night.

We’ve set a new launch date for the course: July 9, and I’m feeling pretty confident that it’s a realistic launch date and we’ll be able to hit it. One of the wonderful things about writing this course is that I have to think a bit more deeply about certain topics and sometimes even do some extra research because I want to make sure I’m explaining things clearly and appropriately for people taking the course. There are many topics that I understand pretty well in a very intuitive way but had to really think hard about when they came up in the course – for example, transients, classes, even some forms of arrays.

I’m approaching this very realistically – I know that most people who take the course will not come from a programming background; their first taste of programming will be this course. What I want to avoid is creating WordPress theme developers who don’t understand PHP and largely only know WordPress functions or only know how to copy/paste things from the internet. I want to foster a real understanding of programming and PHP, that empowers people to be able to make their own functions and really understand what’s happening. In some ways, it’s kind of a tall task, but I think that it’s possible with some extra encouragement and exercises within the course.

April 13, 2019 (!)


Talk about a long hiatus. We have been working on the course between last year May and today, but it has been sporadic at best. Our normal client-side work was really busy, I got married, we both went on a couple vacations..there was a lot going on.

Bobbi and I sat down and had a long planning conversation yesterday, and we set a new launch date, May 27. We created a fairly detailed task list in Asana of everything we have to do before then.

While we were planning, we discovered that the sign up forms on the website no longer worked! It was sad knowing that we probably missed out on a bunch of subscribers in the past 3 months (the last subscription came through on December 26, 2018, so we know it was working till then). It took a little digging and testing but I found the problem (I had somehow accidentally commented out the include statement that added the file with the functionality! smh) and fixed it. 

Today I sat down and coded the sales page design Bobbi created last year (!). The purchasing functionality, the waitlist, the different components that highlight the features of the course, all of it. As always, we build out our designs as stackable blocks (much like how Gutenberg) operates. For the time being, I’ve built out the design using Advanced Custom Fields. However, once the course is launched, I plan on taking some time and converting this entire theme for the website into a Gutenberg compatible one.

As far as the actual course goes, I’ve got 3 more lessons to write and then we will go through the entire course once again, testing and reading to make sure it’s clear, without mistakes, and makes sense. We’ll be opening up pre-orders soon and hope to get a few people (who pre-order) to test the course before it launches at the end of May.

I’m really excited and looking forward to working on this course and actually getting it out there in the world this year.

April 19, 2019


Yesterday we launched the pre-order sales page for the course! We spent a few hours adding and editing some more content and then adding it properly to the page in WordPress. Initially, I thought we’d have to come up with a couple more components or at least a couple more designed styles for the new content, but we were able to use what we already had (plus a couple inline CSS hacks for the moment) to make it look great.

We tested the course pre-ordering process and fixed a few bugs and issues we noticed there as well (yay for Testing Mode!).

We Start With Good Themes Sales Page Preview

Sometimes the little things you think will take no time at all, end up taking the most time. We knew we needed a little area that highlighted who we are and why we wrote this course, and that was the area we struggled with the most. It was easy to create content that highlighted what the course was about and who it would best serve, but talking about ourselves (as usual) was a little tougher. However, we did manage to write something that felt real, it just took a little while.

Let’s talk a little bit about pricing – after all, this post is meant to be transparent. When we first dreamed up this course, we decided that we would price it super cheap, between $50 – $100. Then as I started writing this course, it felt like it was seriously undervaluing the content I was creating; it was so much work and so much helpful information, was it really only worth that much? So we decided to up the price to $199.

Then I started to doubt myself and brought up that concern to Bobbi. We talked about being new in the space and having never sold anything like this before. We also haven’t waited to build a larger audience (our mailing list doesn’t even crack 500) before launching something, and you need to establish trust before you can ask someone to pay you a large sum of money. Services and products differ vastly in the level of trust you need and how you build that trust. So we decided to bring the price back down to $149. It’s still a bit higher than our original intention, but not so expensive that it would feel alarming to buy. We want people to buy the course – we genuinely believe in its helpfulness and value. And over time, as we keep improving the course and build more trust with our audience (that’s you!) we will raise the price a little to reflect that added value.

That felt fair and honest. And since the course is open for pre-order right now, anyone who buys before May 27 will get the course for $99.

This is a really interesting journey for us to be on and I hope an interesting journey for people to read as well. We’re not super famous, very few people know who we are online, and we’ve never done anything like this before. It looks entirely different to be doing a course launch and writing about it at our point in the journey vs. someone who has a big following, a decent mailing list, and is practiced at doing things like this. I look forward to continuously updating this post and sharing how this journey progresses as we launch the course, keep marketing it, and bring students into the course. 🙂

Want to get updates on the WordPress Theme Dev course?

Pop in your email address here and you’ll get an email whenever we make noteworthy progress on creating this course, plus you’ll be able to buy the course before anyone else.

Awesome! You’ll get an email whenever we add to this post, plus a few emails here and there when we publish other useful stuff you might like. We super appreciate you allowing us into your inbox, so we promise not to bug you a lot!

It looks like you're already subscribed. Yay!