Uncategorized

Tips for Getting through the 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 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.

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, resubmitted, and then got a 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 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, we’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.

Design

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!

Code

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 intoafter_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' );

You should also prefix all of your functions to prevent any conflicts with plugins:

// un-prefixed
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 );

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');

jQuery

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

CSS

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?

Useful Links & Resources

Conclusion

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.

This post was originally published by LoveThemes on their blog here.


Scott Parry

About the Author Scott Parry

Scott lives in Wales, collects Apple gear, climbs mountains, and designs in the browser.