Themeforest review process

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 I thought we’d write a short post on the subject.

I’ve been a part of Themeforest now for over 4 years and I’m also an Elite Author, meaning I’ve had my own fair share of rejections over the years, therefore, as you’d expect, I have a fairly good idea of the main reasons for rejection and hopefully this post can help you.

Review Times.

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.

Numerous Soft-Rejections.

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 another 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?

I 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 Bottomline.

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, I’ll cover common reasons for rejection and a checklist of things you should be doing yourself before submitting your item.

Rejection Checklist.

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 username_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. Prefixes should be 3 chars or greater, and unique.

// unprefixed
function the_excerpt_length( $length ) 
    return 50;
add_filter( 'excerpt_length', 'the_excerpt_length', 99 );

// prefixed
function username_the_excerpt_length( $length ) 
    return 50;
add_filter( 'excerpt_length', 'username_the_excerpt_length', 99 );

Sanitize Everything: 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

         '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...", "textdomain" ); ?>

// this only translates, it doesn't escape, use the above instead
<?php echo __( "Read More...", "textdomain" ); ?>

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 username_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', 'username_theme_scripts');


// use jQuery correctly with strict
(function($) {
    "use strict";
    // your code


Make sure your CSS file has a table of contents.

@Author: Scott Parry

This file contains the styling for the actual theme, this
is the file you need to edit to change the look of the

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
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.


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 I’ve missed anything you’d like to see included leave us a message in the comments.


About Me

Designer. Developer. Hacker. Senior Reviewer / Content Specialist @envato