how-to

The Tools Behind A WordPress Theme Shop

When I started to build the Array site, I knew from the get-go that I was going to start from scratch. The only way to achieve the simplicity I wanted on the front-end, was to match it on the back-end. So I started with a blank style.scss file and it grew from there.

Keeping with that mindset, I knew that I wanted the inner workings of the site to be very lean and easily maintainable yet dangerously powerful and scalable. Having experimented with so many different WordPress products, tools and coding practices over the years, I was excited to pool all of these resources together and laser-beam-focus them onto Array. I knew which tools and plugins didn’t work, and I knew which ones worked incredibly well. This is a level you can only achieve by installing an astounding amount of poorly-crafted plugins. I’m still waiting on some sort of acknowledgement of this achievement, by the way.

So today, I thought I’d share with you some of the tools I used to build this new WordPress theme shop, Array.

WordPress

Obviously! Array is built exclusively upon WordPress, currently running the latest release, 3.8.2. I haven’t added any extra arms or legs, it’s just straight up WordPress. All of the functionality comes in the form of a few must-have plugins.

Easy Digital Downloads

Digital downloads made simple with EDD.

Digital downloads made simple with EDD.

Digital download management could not be simpler with Easy Digital Downloads WordPress plugin. Array uses EDD to handle all of the shopping cart functionality, download management, PayPal and credit card payment gateways, licensing and serving theme updates straight to our users’ dashboards. EDD is incredibly well maintained by Pippin Williamson and his growing list of active contributors.

The plugin is updated regularly, has incredible support and has gained widespread support in the WordPress community. This is important. It ensures you can invest in it as a solution and not have to worry about whether it’s going to be maintained in a year or two. The plugin itself is free, but you can purchase a wide range of add-ons for it to make it even more powerful. I use several of these handy add-ons here on the site.

Software Licensing

Software Licensing add-on handles the creation and management of licenses for users when they purchase a theme. The user can then use that license key to get theme updates in their WordPress dashboard.

Stripe Payment Gateway

Stripe Payment Gateway adds the option to process credit card payments through Stripe, which is another invaluable service in itself. Stripe securely handles credit card transactions and payment information for each purchase.

Manual Purchases

Manual Purchases gives me the option to manually create purchases and add files to users accounts. This is very handy in scenarios where I need to add a theme to a users account or modify their purchase.

bbPress

With the new Array site came a new Array support area. The forum format has always worked well for my needs, so I figured I would keep with that. bbPress adds discussion forum functionality to your existing WordPress website. The Array site and support area exist in the same WordPress install. It feels great finally having everything under one roof. It’s so quick to jump around the different parts of the site.

Similarly to EDD, bbPress has a lot of plugins and add-ons you can implement to extend the capabilities of the forum. Documentation for bbPress can be scarce at times, but it generally has pretty good community support and is still under active development.

EDD bbPress Support Dashboard

A few of our support tools.

A few of our support tools.

EDD bbPress Support Dashboard adds moderator functionality to bbPress. It adds widgets that allow you to see pending, unresolved and assigned discussions. It basically turns bbPress into a support ticket system.

Note that this isn’t a heavily supported or necessarily maintained plugin. This is just something the EDD team uses to handle support on their site, which also happens to be powered by EDD and bbPress. It’s a DIY plugin, which is why you have to get it on Github. I’ve extended some of the functionality into various modules and widgets.

Private Replies

Private Replies allows users to set replies as private so that only the original poster and moderators can see it. This lets us share potentially sensitive information with users during a support discussion.

WP Migrate DB Pro

If you’ve developed for WordPress, you’ve most likely had to move a site from local to live or from one server to another. And that was probably not fun for you. WP Migrate DB Pro alleviates that whole situation. This plugin lets you push and pull content from one site to another, syncing your WordPress posts, pages, comments and content between multiple WordPress installs. It’s pretty magical.

Array uses it to keep the staging and production sites in sync. It also has a must-have add-on that enables pushing and pulling of your media files. You can move an entire site’s content in seconds, folks.

WP101

WP101 is a service run by Shawn Hesketh, who curates a collection of WordPress tutorial and instructional videos. They range from WordPress basics to some more complex topics like translating your theme. The video quality, sound quality and video production is superb. The video collection is kept up to date with the latest version of WordPress and its latest features.

I decided to add Shawn’s collection of videos to Array to complement the knowledge base articles and theme help files. It’s a small addition that creates great value for our users. While users are setting up their theme, they can hop into any of the 20+ tutorial videos and learn about a particular feature, without having to go hunting down an answer on Google.

Advanced Custom Fields

Managing theme pages with Advanced Custom Fields.

Managing theme pages with Advanced Custom Fields.

Advanced Custom Fields is a plugin that allows you to add a multitude of pre-made custom fields to your posts and pages. You can add text boxes, checkboxes, WYSIWYG editors, galleries and all kinds of other helpful custom fields. The plugin has a really intuitive UI, is well documented and made with developers in mind.

We use ACF on Array to manage theme pages, allowing us to easily add each theme’s various features and specs to its download page. This helps us keep all of the theme’s info within the WordPress admin, and makes editing and updating the theme page content a breeze.

User Switching

User Switching is great for taking a look at what our users are seeing when they sign in to their Array dashboard. Using this plugin, I can quickly hop between user accounts and diagnose any issues they might be having in their dashboard or support area. This really speeds up the support process, cutting out any guesswork as to what the user might be experiencing in their account.

VaultPress

Seamless backups via VaultPress

Seamless backups via VaultPress

VaultPress is a subscription-based protection, security and backup service for WordPress powered websites. VaultPress runs in the background, seamlessly backing up the entire Array site, from theme pages, to blog posts, to support forum topics. Secure, off-site backups are invaluable when running an online business. The cost of $15/mo is well worth the value should something catastrophic happen to your website.

WordPress SEO

If you’re serious about SEO (and you probably should be), then you’ll want to install WordPress SEO by Yoast. Similarly to W3 Total Cache, there are many plugins out there that offer search engine optimization for WordPress. I’ve chosen WordPress SEO simply because SEO is what exactly Yoast does. Their entire business is dedicated to website optimization and it shows in the products they make. WordPress SEO works well right out of the box, but can be extended heavily if you know what you’re doing.

Google Authenticator and Limit Login Attempts

An extra layer of security with Google Authenticator.

An extra layer of security with Google Authenticator.

A few small security measures can go a long way with WordPress. Two-step authentication has become more and more prevalent in the past couple years, and for good reason.

The Google Authenticator plugin adds two-step authorization to your WordPress login page, requiring you to enter a unique and temporary generated code from the mobile app. Two-step authentication will cut down the likelihood that your site will be compromised by a brute-force attack. Because the temporary Authenticator code isn’t stored anywhere but in your pocket, an attack that guesses usernames and passwords will have little effect.

We also have Limit Login Attempts installed here on Array. This plugin is another security measure that monitors multiple failed login attempts. After a certain amount of failed logins, the login attempt is logged along with the IP and the user is temporarily blocked from accessing the site.

Security is our top-priority when dealing with our users’ content. Although we don’t store payment information on Array, we wouldn’t want anything happening to user’s orders or account information. These plugins are small measures that make a big impact when it comes to protecting your WordPress admin area.

Wrap Up

This small collection of well-made plugins and tools makes it possible for me to run a very lean and scalable online business for less than a few thousand dollars investment. A feat that probably wouldn’t be possible if I wasn’t building on WordPress, using solutions crafted by these dedicated developers.

I hope this provides some insight into the inner workings of the Array site. I’d be happy to answer any further questions you might have about the site in the comments below!

Published by Mike McAlister

A high-powered mutant of some kind, never even considered for mass production. Too weird to live, and too rare to die. I design all the things.

27 Comments

  1. It’s always fun to see what plugins other people are using. Thanks for mentioning the User Switching plugin. I hadn’t heard of it before, but it’s going to be saving me a lot of time in the future!

    Reply
    • That plugin is a gem and one of my favorites! Those are my favorite kinds of plugins, the ones that alleviate really tricky and unique situations. Same goes for WP Migrate DB Pro.

  2. Hi Mike,

    Thanks for putting together such a great article. As someone whom is looking to get into the theming sector this is an absolute gold mine!

    Really great to get a somewhat ‘behind the scenes’ look at how certain aspects like support and digital downloads are handled.

    Also the rebrand to Array is look sweet 😀

    Cheers
    Luke

    Reply
    • Thanks, Luke! Keep an eye on the blog, as I’ll be posting more articles like this, giving you some insight into how the operation works.

  3. Awesome post, love seeing what you’re working with.

    Reply
  4. Thanks for sharing Mike. Am setting up my theme shop so this was helpful. To keep site small, I decided to use external support system FreshDesk.com. Rest of the things are similar to yours except EDD addons.
    Looking forward to read more about the inner workings of a theme design company.

    Reply
  5. Thanks for sharing! Looks like EDD is very popular and easy to setup a theme shop. I’ve been using bbPress for support with help from supportte http://aquagraphite.com/2013/04/supportte-free-bbpress-support-forum-theme/ (I’m selling themes on ThemeForest, so this is good option for me).

    I like the way you include wp101 videos and tutorials into KB. It makes me think about the same thing for me too.

    Thank you very much!

    Reply
  6. Great post Mike. There are a couple there that are new to me, and a couple I had not really looked into particularly closely.

    Which CDN service do you use?

    Cheers,
    Eric

    Reply
    • Hi Eric, I use MaxCDN here on the site. W3 Total Cache has MaxCDN options built right in which makes it really easy to set up.

  7. Hey Mike,

    Have you any plans on contributing your EDD bbPress Support Dashboard widget back to the main repo?

    Cheers,
    Jake

    Reply
    • Hi Jake,
      It’s actually Pippin Williamson’s plugin, so you’d have to ask him if he plans on contributing it. My impression is that it’s more of an internal tool and wouldn’t really be fit for mass distribution. Although a lot of functionality is there, It kind of takes some tooling to get working for your setup.

  8. Hi Mike,

    Thanks a lot for the the tips, we are quite new into this market with themeisle.com and the post was really helpful .

    Reply
  9. Very helpful with me! I’m building a shop themes like this. Hope will done quickly after read this article.

    Thanks

    Reply
  10. Mike,

    Love your stuff.

    I’m curious about the license keys with the GPL. You sell on the wordpress.com commercial market, correct? And your themes are GPL licensed? Can you utilize license keys via EDD’s addon with the WP.com market or do they have a different method?

    It seems key for a theme business to have the option to renew theme licenses yearly, especially from a support standpoint. I’d be curious to know what the renewal rate is typically…

    Awesome post, appreciate it!

    Cheers,
    Joshua

    Reply
    • Hi Joshua,
      We currently sell our themes on WP.com and here on Array, both with a GPL license. We are not able to use EDD licenses on WP.com, as they have a different model over there. As far as I know, there is no defined support window and users can ask questions as long as they have the theme.

      However, because of the controlled environment of WP.com (no hosting issues, no plugins, far less variables) we see significantly less support and so we we’re happy with the open ended agreement.

      The themes we sell on on Array can be downloaded and installed on any self-hosted WordPress site. Because of this, we see a lot more support. Users are more curious about theme modifications, installing plugins, and there are far more variables that make support more involved.

      We provide an optional yearly renewal for support and updates, so some users will renew and some users will pass, depending on if they still need help with their theme. Because our themes are built to work out of the box, they generally aren’t very tricky to work with. This could lead to less renewals, but happier customers overall. We’ll gladly take the latter. 😉

      It’s hard to know what our renewal rate will be here on Array, since we haven’t reached that first year of renewals yet. I’ll be happy to share those details when I reach that milestone!

  11. Hi Mike,

    Thanks for the list… I plan to use EDD for my theme shop also, but I still have some questions, especially about Software Licensing extension. I see that you can use Software Licensing for “Single Theme” product… But, how do you use Software Licensing to handle your “Theme Pass” product where you can get all theme collection? Would you mind to share it?

    Thank you very much.

    Reply
    • Hi Agus,
      The Software Licensing plugin works similarly for single themes and the Theme Pass. Theme Pass users get a license for each theme that they can use to get theme updates. The Theme Pass is a download like single downloads, but with multiple files attached as a bundle.

  12. I come back here since I owe you 🙂

    1. We have implemented a nice development/ update system for themeisle that you can use on array.is which work like this :

    – For each theme you will need to have a github repository with a development branch and a production one
    – On each push from development to production, a hook is called, which :
    – increase the version number in style.css
    – can increase the version number on your site
    – generate a changelog with the dates, version number and commit comments from the commits pushed on dev
    – create a release on github like this : https://github.com/Codeinwp/test-repository/releases
    – append the update script in functions.php, so you don’t need to worry about this
    – generate a zip file with the latest version and place it in a defined place on the server
    – increase the version number in the update config file, so users will get an update notification
    – you can hook a dev site to the development and a demo site to production so on each commit the theme is update to those servers for testing purposes
    – you have an emergency roll-back button in a panel in case that an update goes wrong, which will revert to the previous release .
    – Everything is also integrated with Easy Digital Downloads Software Licensing plugin

    I know that we, as developer we often forgot about our own needs, so if you are interested in the previous solution as hosted/cloud, just let me know along with some feedback if you have. Using this, the only thing you need to do is to work on your product in a development branch and when you are ready to push on the production one, everything else is handled automatically and in a very clean way.

    2. I don’t know if you saw this extension yet : https://chrome.google.com/webstore/detail/easy-digital-downloads-ed/mgmfodgojpiopeafkbaabjbmjlnljhba, should be cool 🙂

    Reply
    • Hey Ionut,

      Thanks for sharing your setup. We’ve built a similar system for deploying updates that is integrated with the EDD SL plugin. It removed a bunch of manual labor we were doing before.

      Our setup is a little different than how you describe yours. We don’t use the commit messages for change log info, as they can sometimes be more technical in nature, and we prefer to manually write those in a language more suitable for non-technical people. Also, we sometimes make multiple commits for a particular feature/fix, and wouldn’t want all the extra commit messages showing up in a change log like that.

      Overall though, it sounds like we’re doing something similar. I’ve been considering writing up a post about how we do all this, but it’s probably better suited for my own blog since it’s more of a technical write up. Have you considered doing this and showing the implementation details of your setup?

  13. Hi thank you so much for sharing this helpful article,can I ask what sort of portfolio you are using to showcase your theme,I really like the fact that it has build in live demo and purchase feature,how did you achieve this system?thank you 😀

    Reply
    • Hi Tuan,

      Thanks for the kind words. Everything you see on the current site is custom built, even the theme previews. The live demos are essentially just using an iframe and an overlay div. When you click the demo button, the iframe loads and then pops-up when the loading is complete. We’re actually going to be moving away from this when we relaunch our site soon. Although it is a smooth transition into the demo, working with iframes can be tricky and unpredictable.

  14. Hi Mike!Thank you for your your reply,I love your Array,you guys have done an such a fantastic job,weldone guys.Hey Mike,you are a such lovely man,I have to say,thank you so much for your sharing,I will try the way you set it up.I found this demo bar on Themeforest,it does work for user want switching between themes http://codecanyon.net/item/fbar-responsive-wordpress-demo-switch-bar-plugin/5117122 please let me know what you thing,your review is valueable to me ,that’s for sure,onec again thank for sharing Mike and I am very impressed what you have done both on Theme forest and your sexy Array,all the best Mike.

    Reply
    • Hi Tuan,

      Thanks for the kind words! Unfortunately, I’ve never tried that theme switcher. I created my own a few years ago and have since stopped using them, as I feel like they are distracting to the theme demos. However, that one looks like it has decent reviews so it might be worth a shot!

  15. Hi Mike,

    Thank you so much for your awesome and helpful article! I am planning to set up a theme shop on my own domain but had no clue what to start. Your post is really a great guidance. 🙂

    May I ask you a few questions?

    1. Tax stuff – Is there any specific thing I should know about tax when selling worldwide? Or, this would generally depend on the law in my country?

    2. License – Do the selling themes need to be under GNU Public License only or, how do I know what is the appropriate one? Or, can I set ones up like on ThemeForest? (Regular, Extended, etc.)

    3. Terms and Conditions – Do I need a lawyer to draft/write them up to cover every important info? Or, can I just find the templates and edit them to fit with the business?

    Thank you!

    Reply
    • Hey there, thanks for stopping by! Happy to elaborate on these for you.

      1. The best advice I can give anyone on tax related stuff is simply to hire an accountant at the beginning. I did taxes for my own business for a few years and while it went fine, I wasn’t maximizing the benefits that an S-Corp allows you to have. A good accountant will know all of the ins-and-outs of the various types of business and help you sort out all of the confusing tax rules.

      2. You can sell themes with whatever license you want, but it may limit where you can distribute your themes and how they might be used. For example, they have to be GPL licensed to be listed on WordPress.org or WordPress.com. I can tell you first hand that having them licensed as GPL has no negative effect on business whatsoever. Personally, I prefer the freedom the GPL provides me to shop my themes around.

      3. You shouldn’t need a lawyer when you’re just starting out. Automattic has open sourced their terms for people to use freely. You could start there, grabbing the bits that you need and customizing it to fit your site. https://github.com/Automattic/legalmattic

      Hope that helps! Good luck on your theme shop and please send over a link when you’re live!

  16. Thank you for your elaboration and wonderful advice Mike! I really appreciate that. I will tell you once again when everything is settled. 🙂

    Have a great one!

    Reply

Leave a Reply

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

Error: Please enter a valid email address

Error: Invalid email

Error: Please enter your first name

Error: Please enter your last name

Error: Please enter a username

Error: Please enter a password

Error: Please confirm your password

Error: Password and password confirmation do not match