Learn The Themeforest Review Process to Get Your WordPress Theme Approved
Recently, there has been a lot of posts on the Themeforest forums about the current theme review process, review times, hard-rejections, soft-rejections and lots of frustrated authors, so we thought we’d write a short post on the subject.
We’ve been a part of Themeforest now for over 4 years and we’re also Elite Authors, meaning we’ve had our own fair share of rejections over the years, therefore, as you’d expect, we have a fairly good idea of the main reasons for rejection and hopefully this post can help you.
Okay, so the first complaint we’ve started to see a lot of is the review time.
“I’ve been waiting 7 days, is something wrong, what should I do?!”
Well, firstly, you have to understand the marketplace has grown exponentially over the last few years, 4 million members, 6 million items for sale and a small review team.
You can already see where this is going, obviously the number of items being submitted is huge, therefore it takes time for you to move through the review queue, it’s just the way it is.
What should I do?
Nothing. Nothing at all. Submit your item and move on, take a break, start another theme, learn some new stuff, anything is far better than sitting at your Dashboard waiting for the review, use your time constructively instead.
Okay, let’s move on, the next complaint is the number of rejections an author receives.
“I got a soft-rejection for X and I fixed it, resubmitted, and then got aanother soft-rejection for Y, why didn’t they say that the first time?!”
Well, think about it, imagine that the reviewer sat down and went through every single theme and wrote a list of every single issue first time around, you’d be in the review queue for far longer than the current 7 day average, and you’d be feeling even more frustrated.
Or, how about the reviewers are only human?
They missed it the first time round, this is acceptable isn’t it? After all, you missed the bug too when you submitted.
There is an upside to numerous soft-rejections though, the bugs are being caught before your item goes live.
Imagine if they didn’t, yes you’d fix them eventually, but how many sales would you lose in the meantime, how many 1 star ratings would you receive?
We also get the fact that many authors like to know roughly when their item is going to be approved for marketing purposes, and maybe that is something Envato could look at, possibly an option for an author to set their item live whenever they want after being approved, this may just help with the review process as a whole.
The fact of the matter is, if your item has issues, then it’s going to have rejections, no matter what, the easiest way not to get rejections, or reduce the amount of rejections, is to make sure the item is right in the first place.
Hence the next section in the post, we’ll cover common reasons for rejection and a checklist of things you should be doing yourself before submitting your item.
Okay, so the review method is something like this:
- Awesome Design + Great Code = Approved.
- Generic Design + Great Code = Soft-Rejection.
- Awesome Design + Poor Code = Soft-Rejection.
- Generic Design + Poor Code = Hard-Rejection.
So, with that in mind, the first thing you’re going to want to check is the design, after all, if the reviewers see a really poor design they won’t even get into the code review.
Post it up on the forums and ask for a critique, but be prepared, sometimes you won’t hear what you want to hear, you may think it’s awesome, but in reality in may not be, but that’s part of being a designer, take the critique, make some tweaks and make it awesome!
Okay then, you’ve posted your item for critique, everyone says it’s as awesome as you knew it was, good stuff, now to checkout the code.
Much of this section focuses primarily on WordPress themes, but you can take away some of the advice for HTML templates too.
Validation: Your first check should be validation, does your code validate? Don’t get too hung up on validation though, yes you should remove as many validation errors as possible, but some errors are just going to occur no matter what you do, EDGE errors, or nesting issues because of a dynamic section being inserted, you just need to use your own judgement as to what is acceptable and what isn’t.
Some of our own themes have 10 or so validation errors, simply because of nesting issues, or WordPress doing it’s usual trick of wrapping elements in p tags where they’re not needed, it happens, but some themes have 200+ errors, which just isn’t acceptable at all.
Functions: When creating custom functions you should hook into after_setup_theme to run your functions once the theme is initialized.
function my_theme_setup() // your functions add_action( 'after_setup_theme', 'my_theme_setup' );
It is also good practise to prefix all of your functions to prevent any naming conflicts with plugins.
// unprefixed function the_excerpt_length( $length ) return 50; add_filter( 'excerpt_length', 'the_excerpt_length', 99 ); // prefixed function lovethemes_the_excerpt_length( $length ) return 50; add_filter( 'excerpt_length', 'lovethemes_the_excerpt_length', 99 );
Sanitize Data: This is very important, not only is it a big reason for rejection, it’s good practise to make sure your theme is as secure as it can be.
// escape custom variables esc_url( $logo['image'] ); // escape wordpress function esc_url( home_url() ); // sanitize callbacks when using add_setting in theme customizer $wp_customize->add_setting( 'lovethemes_styling[accent_color]', array( 'default' => '#862437', 'type' => 'option', 'capability' => 'edit_theme_options', 'transport' => 'postMessage', 'sanitize_callback' => 'sanitize_hex_color', ) );
Translation: Again, it’s good practise to make any static text throughout your theme translatable, this way, even if the user doesn’t want to translate the theme, they can change the values of static text throughout simply by using .mo/.po files rather than having to search through files.
// make static strings translatable <?php esc_html_e( "Read More...", "lovethemes" ); ?>
Default WordPress Functions:
Make sure you’re utilizing default WordPress functions correctly.
// enqueue the comment reply script in the <head> <?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' ); ?>// wp_head() must be present directly before the closing </head> tag <?php wp_head(); ?>// wp_footer() must be present in your footer <?php wp_footer(); ?>// enqueue theme styles function my_theme_styles() // wp_enqueue_style syntax, $handle, $src, $deps, $ver, $media wp_enqueue_style( 'style', get_stylesheet_uri(), '', '2014', 'screen', true ); add_action( 'wp_enqueue_scripts', 'my_theme_styles' ); // enqueue scripts function my_theme_scripts() // load wordpress jquery wp_enqueue_script( 'jquery' ); // wp_enqueue_script() syntax, $handle, $src, $deps, $version, $in_footer(boolean) wp_enqueue_script( 'plugins', get_template_directory_uri() . '/assets/js/plugins.js', 'jquery', '', true ); wp_enqueue_script( 'application', get_template_directory_uri() . '/assets/js/application.js', 'jquery', '', true ); add_action( 'wp_enqueue_scripts', 'my_theme_scripts');
// use jQuery correctly with strict (function($) "use strict"; // your code )(jQuery);
Make sure your CSS file has a table of contents.
@Author: LoveThemes @URL: http://lovethem.es This file contains the styling for the actual theme, this is the file you need to edit to change the look of the theme. This files contents are outlined below. 1. Default WordPress 2. Base Styles 3. Preloader 4. Newsletter 5. Hellobar 6. Logo 7. Primary Navigation 8. Search 9. Social Module 10. Content 11. Slider Module 12. Twitter Module 13. Footer 14. Secondary Navigation 15. Contact Module 16. 404 Page 18. Posts 19. Social Share 20. Related Posts 21. Postmeta 22. Pagination 23. Postnavi 24. Comments 25. Sidebar 27. Widgets 28. Shortcodes & Classes
Checklist Overview & Tips
- Is your design unique and up to standard?
- Does your code validate?
- Is your code well documented?
- Are your functions prefixed?
- Have you sanitized data?
- Is your theme translatable?
- Are you using WordPress functions correctly?
- Are you enqueuing scripts & styles?
- Are you using jQuery in strict mode?
- Does your CSS have a table of contents?
- Have you tested your theme with unit test data?
- Have you tested all widget areas?
- Have you enabled debug in wp_config.php and tested with theme check plugin?
- Have you checked loadtime and improved by combining & minifying your CSS / JS?
- Have you checked loadtime and improved by optimizing images?
Links & Resources
- Validate Code – validator.w3.org
- Enqueuing Scripts – http://codex.wordpress.org/Function_Reference/wp_enqueue_script
- Enqueuing Styles – http://codex.wordpress.org/Function_Reference/wp_enqueue_style
- Data Validation – http://codex.wordpress.org/Data_Validation
- Data Validation – http://www.paulund.co.uk/data-validation-with-wordpress
- Data Validation – http://mikejolley.com/2013/08/keeping-your-shit-secure-whilst-developing-for-wordpress/
- Sanitizing – http://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data
- CSS / JS Compression – http://refresh-sf.com/yui/
- Compress Images – http://www.smushit.com/ysmush.it/
- Theme Unit Test – http://codex.wordpress.org/Theme_Unit_Test
- Test Widget Areas –https://wordpress.org/plugins/monster-widget/
- Theme Check – https://wordpress.org/plugins/theme-check/
- Themeforest Guidelines – https://help.market.envato.com/hc/en-us/articles/202822450-WordPress-Theme-Submission-Requirements
- Understanding The Review Process – http://marketblog.envato.com/general/submission-tip-understand-the-themeforest-reviewing-process/
- Visual Hierarchy – https://hackdesign.org/lessons/19/
- Inspiration – http://www.awwwards.com/
- Inspiration – https://dribbble.com/
Following this list won’t guarantee first time approval, but it should reduce the amount of rejections you receive. Hopefully you found this post useful and if we’ve missed anything you’d like to see included leave us a message in the comments.