• Stars
    star
    154
  • Rank 234,554 (Top 5 %)
  • Language
  • Created over 6 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A comprehensive list of rejection messages which you should avoid to get your WordPress theme approved quickly in Themeforest

Comprehensive WordPress Theme Approval Checklist for ThemeForest

Alright, here you go.

Prefix everything:

Make sure that your theme functions are prefixed before submitting your theme for review. Prefix should be identical all across your theme, and you can not use multiple prefixes. While prefixing, double check the following rules

  • Function names should be prefixed
  • Image sizes added via add_image_size() function. All image size names should also be prefixed with that same prefix.
  • All global variable names. Add a prefix to all variable names that you declare outside a function scope.

While prefixing, please remember that refixes should consist of either your themename_, authorname_, or frameworkname_

Example

$mythemename_variable = "whatever";
	
function name mythemename_whatever(){
	//your function body goes here
}
	
add_action( 'after_setup_theme', 'mythemename_setup' );
	
function mythemename_setup(){
	add_image_size("mythemename_single_hero", 1140, 9999);
	//rest
}

Rename your script and css handles:

If you're enqueueing external css and JavaScript files, you need to rename your style and js handlers inside the wp_enqueue_script() function and use meaningful and readable handler names.

Example

function mythemename_enqueue_js_and_css(){
	$admin_js = admin_url("admin-ajax.php");
	wp_enqueue_script( "bootstrap-js", mythemename_get_js_assets_dir()."/bootstrap.js", array("jquery"), null,true );
	wp_enqueue_script( "cookie.js", mythemename_get_js_assets_dir()."/js.cookie.js", array("jquery"), null,true );
	wp_enqueue_script( "modernizer", mythemename_get_js_assets_dir()."/modernizr.custom.js", array("jquery"), null,true );
	wp_enqueue_script( "jquery-slicknav", mythemename_get_js_assets_dir()."/jquery.slicknav.min.js", array("jquery"), null,true );
	wp_enqueue_script( "jquery-owl", mythemename_get_js_assets_dir()."/owl.carousel.min.js", array("jquery"), null,true );
	wp_enqueue_script( "mythemename", mythemename_get_js_assets_dir()."/scripts.js", array("jquery"), "1.0.1", true);
	wp_localize_script("mythemename","mythemename",array("ajaxurl"=>$admin_js));
	
	wp_enqueue_style( "google-fonts", "//fonts.googleapis.com/css?family=Lora:400,400i,700,700i|Montserrat:300,400,700", null );
	wp_enqueue_style( "fonts-local", mythemename_get_fonts_assets_dir()."/selima.css", null );
	wp_enqueue_style( "bootstrap-css", mythemename_get_css_assets_dir()."/bootstrap.css", null );
	wp_enqueue_style( "font-awesome", mythemename_get_css_assets_dir()."/font-awesome.css", null );
	wp_enqueue_style( "owltheme", mythemename_get_css_assets_dir()."/owl.theme.default.min.css", null );
	wp_enqueue_style( "owl", mythemename_get_css_assets_dir()."/owl.carousel.min.css", null );
	wp_enqueue_style( "slicknav", mythemename_get_css_assets_dir()."/slicknav.css", null );
	wp_enqueue_style( "mythemename", mythemename_get_css_assets_dir()."/styles.css", null, "1.0.1" );
	wp_enqueue_style( "mythemename-style-responsive", mythemename_get_css_assets_dir()."/style-responsive.css", null );
}
	
add_action( 'wp_enqueue_scripts', 'mythemename_enqueue_js_and_css' );
	

For details you can check out this documentation by grappler - https://github.com/grappler/wp-standard-handles

Theme preview image size:

According to the WordPress org, the dimension of the "screenshot.png" a.k.a "Theme Preview Image" inside your theme directory should be of 1200px width and 900px height (1200x900). This is required to display the "theme preview image" properly on retina / high-dpi displays.

No Comments:

If there are no comments in your WordPress posts, and you want to inform that to your users in your theme, the string must display as "No Comments".

In one of our submissions, accidentially the trailing "s" was deleted, and the string turned into "No Comment" which resulted a soft rejection :)

No Notices, No Warnings, No Errors:

Zip zilch nada. Make sure that your theme doesn’t raise any PHP errors, notices or warnings. Enabling wp_debug inside your wp-config.php file can help you with this. Please also remove that your theme must not generate any runtime JavaScript errors as well. To deal with this please install the Developer plugin from Automattic. Then turn on "Debug Bar" in the plugin serttings. You can also manually install the Debug Bar plugin for this purpuse.

Example

define('WP_DEBUG', false);

Oh Licneses:

This is a tricky part and has been a long going battle between WordPress and some theme vendors (and marketplaces) because items being sold in the marketplaces are usually not fully GPLed. Part of these items (for example PHP code) is licensed under GPL and the rest is proprietery licenced. Sometime the third party components like Bootstrap and many other JavaScript plugins are licensed under MIT/BSD/Apache and other different licenses available out there. This result a confusion which you must clarify while submitting your theme. You must mention to the reviewer that the theme is Split Licenced. In your theme style.css should mention it too

Example

/*
...
License: Split License
...
*/
	

No direct enqueueing of jQuery:

If you're enqueueing third party JavaScript files or your theme scipt files, which often depends on jQuery, you should define the dependency via dependency param in wp_enqueue_script() function. Don't enqueue jQuery directly or individually, or it will result a soft rejection. Here's an example

Example (Don't do this)

wp_enqueue_script('jquery'); 

Correct Example

wp_enqueue_script( "bootstrap-js", mythemename_get_js_assets_dir()."/bootstrap.js", array("jquery"), null,true );

Once jQuery is definied as a dependency, WordPress will automatically enqueue it from the bundled version of jQuery that ships with WordPress.

Adding Google Font:

Whenever we're addding google font(s), we have to make sure that we are following the best practice. We have to add google font in the following way because most of the fonts doesn't support characters from all the languages.

Example

wp_enqueue_style( 'prefix-google-font', prefix_get_google_font_url() );
function prefix_get_google_font_url() {
	$font_url = '';

	/* Translators: If there are characters in your language that are not
	* supported by Arizonia, translate this to 'off'. Do not translate
	* into your own language.
	*/
	$arizonia = _x( 'on', 'Arizonia font: on or off', 'massive' );

	/* Translators: If there are characters in your language that are not
	* supported by Source Sans Pro, translate this to 'off'. Do not translate
	* into your own language.
	*/
	$source_sans_pro = _x( 'on', 'Source Sans Pro font: on or off', 'massive' );

	if ( 'off' !== $arizonia || 'off' !== $source_sans_pro ) {
		$font_families = array();

		if ( 'off' !== $arizonia ) {
			$font_families[] = 'Arizonia';
		}

		if ( 'off' !== $source_sans_pro ) {
			$font_families[] = 'Source Sans Pro:400,300,400italic,600';
		}

		$query_args = array(
			'family' => urlencode( implode( '|', $font_families ) ),
			'subset' => urlencode( 'latin,latin-ext' ),
		);

		$font_url = add_query_arg( $query_args, '//fonts.googleapis.com/css' );
	}

	return esc_url_raw( $font_url );
}

No inline scripts and styles:

You must use css class names and avoid inline css styles (as style attribue). You must also avoid inline JavaScript code through out your theme. Scripts and styles should not be hardcoded anywhere in your theme or added any other way but with wp_enqueue_* hook and to be added from the functions file. This includes custom JS/CSS. For inline styles use: https://developer.wordpress.org/reference/functions/wp_add_inline_style/ and for scripts https://developer.wordpress.org/reference/functions/wp_add_inline_script/

Escape, Escape & Fucking Escape:

All dynamic data must be correctly escaped for the context where it is rendered. Please perform a global search for echo $ in your theme and take necessary actions. You can read more on properly escaping your code, here - Escaping: Securing Output

While escaping, please also remember to late escape to give a clear picture about your escaped data to the reviewers. For example, check this section - Escaping: Always Escape Late

No fallback for third party services:

I learned about this when we added an instagram gallery in one of our themes. On first installation, when there is no instagram username configured to display, we were using a fallback username to display that user's instagram feed. This behaviour caused soft rejection and we had to remove this fallback username. At the end, if there was no instagram username, we had to hide that section.

https://cdn-pro.dprcdn.net/files/acc_493641/EfuhRm

Watch out for plugin territory:

In one of our themes, we had added a feature called "Featured Posts" where anyone can check the "Feature This Post" checkbox in the post editor window. We had also added a new column in the "All Posts" table which showed a checkmark beside all the post titles that has been featured. Unfortunately this resulted in soft rejection. The reveiwer mentioned that it is a plugin territory code.

So our suggestion is that don't incorporate any code in your theme that changes any default behavior, or look-n-feel in any core panel or component. Write a helper plugin and add those functionalitites in that plugin.

Besides, avoid the following things from your theme and move to your helper plugin.

  • Any call to wp_mail()
  • Registering custom taxonomy
  • Registering custom post type

Bundle your zipped plugin:

When you have a helper plugin that registers CPT (Custom Post Type), custom taxonomies or incorporates other plugin territory functions, you need to zip it and keep inside your theme, and install that plugin from there when someone activates your theme. You can do it using TGMPA plugin activation library. Don't put the plugin file without zipping inside your theme, or it will cause a soft rejection. Please also remember not to keep this plugin in a remote location and install from there cause that will also disqualify your theme from getting approved.

Say, your plugin file name after zipping is "themename-helper-plugin.zip" and you placed inside the "plugin" directory inside your theme. Now you can use TGMPA plugin activation in this way to declare your plugin as a required asset.

add_action( 'tgmpa_register', 'mythemename_register_required_plugins' );

function mythemename_register_required_plugins() {

	$plugins = array(

		array(
			'name'               => 'ThemeName Plugin Name',
			'slug'               => 'themename-helper-plugin',
			'source'             => get_template_directory() . '/plugin/themename-helper-plugin.zip',
			'required'           => true,
			'force_activation'   => false,
			'force_deactivation' => false,
		),

	);

	$config = array(
		'id'           => 'themename',
		'default_path' => '',
		'menu'         => 'tgmpa-install-plugins',
		'has_notices'  => true,
		'dismissable'  => true,
		'dismiss_msg'  => '',
		'is_automatic' => false,
		'message'      => '',
	);

	tgmpa( $plugins, $config );
}

No commented out code:

This one is pretty straight-forward. If your theme contains commented out code or code blocks, you should remove those before submitting your theme for review. Otherwise, they will get back to you with this same message, again and again.

Search form issues:

you cannot simply place your search form markup in your theme because that will cause a rejection. Reveiwers will tell you that you should use the function get_search_form(). So what can you do if you want to modify the search form elements? Do you have to abandon your shiny new search form markup that you designed previously? No! You can still display your own search form using the filter get_search_form. Here is an example

Example

add_filter("get_search_form","mythemename_get_search_form");

function mythemename_get_search_form($form){
	return "<your own search form code>";
}

Post password:

if a post is password protected, you should not display the comment section, or any other information that is related to that post, until the password was entered by the user. This also include the number of comments. Check out this function post_password_required

More Repositories

1

hydra

Hydra is a zero-config API boilerplate with Laravel 10x + Laravel Sanctum that comes with an excellent user and role management API out of the box
PHP
923
star
2

tailwind-cards

A growing collection of text/image cards you can use/copy-paste in your tailwind css projects
CSS
557
star
3

ImageCaptionHoverAnimation

CSS3 Based hover animation for Image Captions
HTML
352
star
4

banner-designer

Design beautiful banners with this visual banner builder
JavaScript
267
star
5

essential-jquery-plugins

This is a list of useful and handy jQuery Plugins, properly categorized and sorted :)
221
star
6

wpsqlite

Quickly provision a fully functional WordPress site with SQLite, with *.wplocal.xyz domain support
PHP
206
star
7

vue3-icon-picker

A fantastic icon picker for Vue3 projects
JavaScript
196
star
8

tailwind-boilerplate

Tailwind CSS 3 + Vite Boilerplate
HTML
162
star
9

cmb2-metabox-generator

Visual Code Generator for CMB2 Metaboxes
JavaScript
104
star
10

fifawc

Fifa WorldCup 2018 Fixture In Your Local Time
JavaScript
99
star
11

wp-functions-list

This is a list of all WordPress functions from version 0 to version 4.8.1 along with the data of when they were first introduced and if they are deprecated or not
93
star
12

javascript-text-expander

Expands texts as you type, naturally
JavaScript
66
star
13

fatalsafe

Save your ass when you're struck by a fatal error while editing a live theme in WordPress admin panel
PHP
61
star
14

wordle-alpinejs

Wordle Game using Alpine JS
JavaScript
55
star
15

Nanimator

jQuery Nano Animation Library
JavaScript
51
star
16

button-hover-style

A nice button hover style with background image and text animation
HTML
50
star
17

StickySocialBar

Sticky social networking bar with css3 transitions
JavaScript
47
star
18

plugin-boilerplate-code-generator

Plugin Boilerplate Code Generator from Tom Mcfarlin's Plugin Boilerplate
PHP
44
star
19

vue-calc

A simple and useful number project using Vue 3 for everyday use
CSS
41
star
20

paddle-woocommerce-3

Integration of Paddle payment processor with WooCommerce 3. Original work was done by Paddle. Improvements are being done by ThemeBucket
PHP
39
star
21

LastTab

(Not Maintained Anymore)
JavaScript
39
star
22

100DaysOfCode

100 Days of Code - You know the rest :)
HTML
37
star
23

LazyMouse

detect the mouse inactivity and fire javascript events for that
JavaScript
35
star
24

laravel-login-registration-facelift

Time to give your default laravel authentication views some facelift, yeah!
HTML
32
star
25

wpvue

WordPress Plugin Starter with Vite+Vue3
Vue
27
star
26

windicss-boilerplate

WindiCSS + Vite boilerplate to quickly start developing your windicss/tailwindcss projects
JavaScript
25
star
27

colored-console-log

Display colored log message in js developer console
JavaScript
25
star
28

elementor-blank-extension

Elementor Blank Extension is a boilerplate for creating Elementor extensions and widgets
PHP
23
star
29

css3-3d-curtain

A nice 3d-curtain type slideshow using animate.css and jQuery
22
star
30

learnbackbonejs

ΰ¦¬ΰ¦Ύΰ¦‚ΰ¦²ΰ¦Ύΰ§Ÿ ব্যাকবোন.ΰ¦œΰ§‡ΰ¦ΰ¦Έΰ§‡ΰ¦° উΰ¦ͺরে কিছু ΰ¦Ÿΰ¦Ώΰ¦‰ΰ¦Ÿΰ§‹ΰ¦°ΰ¦Ώΰ¦―ΰ¦Όΰ¦Ύΰ¦²
22
star
31

VisualComposerShortcodeGenerator

Quickly generate visual composer shortcode mapping with wordpress shortcode
JavaScript
22
star
32

hasinhayder

Portfolio
21
star
33

Shared-Taxonomy-Counter-Fix

This plugin fixes the taxonomy counter in WordPress admin panel if the taxonomy is shared across multiple post types. It's a known bug in WordPress.
PHP
20
star
34

developers-treasure-chest

Interesting Github Repos, SaaS Applications, News, Tools, and Technology For The Developers. Updates Frequently
19
star
35

tesla-modelx-tailwind

Tesla ModelX Hero Section Clone using Tailwind CSS
CSS
19
star
36

image-search

Image Search using AlpineJS + Fetch API
HTML
19
star
37

LightBulb

Project LightBulb is a wrapper on top of Facebook's own JS-SDK and Graph API to simplify developing applications using Graph API. You dont need to worry about underlying objects, structures, workflows. Just use it to develop your Facebook Applications and shout "Light Bulb" :)
JavaScript
19
star
38

RoboWP

One page app landing page template - wordpress version
PHP
18
star
39

wp-quick-provision

Quick Provisioning Plugin For WordPress
PHP
18
star
40

Airbnb-Style-FAQ-Navigation

A beautiful FAQ dropdown nav item using ReactJS, as shown in Airbnb
JavaScript
18
star
41

colorconsole

Colorconsole provides an interesting way to display colored info, success, warning and error messages on the developer console in your browser
TypeScript
18
star
42

LearnWithHasinHayder

Code files from my official tutorial channel, LearnWithHasinHayder
PHP
17
star
43

FacebookMessengerBot-Using-NodeJS-Express

JavaScript
16
star
44

vue3-video-playlist-project

Vue 3 Video Playlist Project using Options API
CSS
15
star
45

InteractiveForwardBot

Ask questions in a sequential order with lots of funs included!
JavaScript
15
star
46

infinte-scroll-wp

infinte-scroll-wp - A demonstration of infinite scrolling in wordpress themes, comes with detail information.
PHP
15
star
47

windicss-image-hover-animation

Beautiful image hover animation inside a flex layout system using WindiCSS/TailwindCSS
HTML
14
star
48

dimgx.net

source code of dimgx.net
PHP
14
star
49

WordPress-Code-Snippets

A collection of useful code snippets, hooks, tips and tricks for WordPress theme and plugin developers
14
star
50

bnKbjQuery

Bangla Keyboard Input Script jQuery Plugin
JavaScript
13
star
51

wordpress-3.5-bangla-book

Collaborative effort on writing a good wordpress book in bangla
13
star
52

wp-logout-redirect

WordPress plugin that takes users to the home page after logout from admin panel
PHP
13
star
53

responsivegrid

Simple Responsive Grid with debounce that works really well everywhere.
JavaScript
13
star
54

CSS3-Storyline-Animation

Demonstration of CSS3 Storyline Animation using jQuery Transit Library
JavaScript
12
star
55

openshift-symfony-2.3.0

Openshift ZendServer 5.6 and PHP 5.3 boilerplate symfony 2.3.6 repo
PHP
11
star
56

BreakPoint

loads and executes external javascript based on viewport width and given breakpoints
JavaScript
11
star
57

wpfavs-public-api-cloudflare-worker

Fetch favorite themes and plugins form a WordPress.org user profile by his/her username and return as JSON data. This project is hosted on CloudFlares worker platform, so it is fast, very fast.
JavaScript
11
star
58

css-grid-examples

HTML
10
star
59

jQueryLabel

Turn some spans looking like GMail Mail Label
JavaScript
10
star
60

Flixplore

Flixplore displays first 110 photos from daily Flickr Explores using Meteor (http://meteor.com)
JavaScript
9
star
61

jQconfigurator

Attach a flexible config panel to any DOM Element using this neat and powerful jQuery Plugin
JavaScript
9
star
62

GoChuck

Random Chuck Norris Jokes
Go
8
star
63

vue-search

A Vue 3 project demonstrating how to use fetch() API and two way data binding for quick data search
HTML
8
star
64

BanglaTwitterStatus

Post twitter status in Bangla
7
star
65

vue3-vite-windicss-boilerplate

Vue3 + Vite + WindiCSS (Tailwind) Boilerplate for quick starting your Vue3 app with full support for tailwind
Vue
7
star
66

openshift-php-client

open shift php client for their rest api
PHP
7
star
67

wordpress-com-proxy

proxy script to deliver wordpress.com blog from anywhere with few enhancements
PHP
6
star
68

demo.lwhh.link

My Personal Link Shortener
PHP
6
star
69

CSS3-Keyframe-Transition

Beautiful CSS3 Animation with Two Moving Cars :)
JavaScript
6
star
70

Woocommerce-Disable-Email-Change

Prevent users from changing email address from their WooCommerce dashboard.
PHP
6
star
71

JustSlide

simple full width slider that just works. perfect for showcasing products or portfolio items
JavaScript
6
star
72

jquery-mouse-direction

This can fire custom mouse-direction event on any elements which you can then listen to and bind a listener routine.
JavaScript
6
star
73

StringScrambler

A funny string scrambler program keeping the first and last letters same in each word
Go
6
star
74

nanogallery

beautiful fullscreen gallery with vertical and horizontal thumbnail preview
JavaScript
6
star
75

ResponsiveGalleryWithFiltering

Responsive gallery with filtering using MisItUp and FancySelect
JavaScript
5
star
76

jHoverContainer

Container with Sliding Image and nice rollover effects
JavaScript
5
star
77

freader

5
star
78

vue-content-edit-example

A fun content edit example with Vue 3
Vue
5
star
79

phar-cli-boilerplate

Boilerplate project to create command line applications in PHP and bundle as a phar package
5
star
80

image-slide-with-single-img

Nice image slide animation with a single div, animate css and a little jQuery :)
5
star
81

MyReadingList

I come across a lot of interesting stuffs everyday. Here, I will be keeping track of those things
5
star
82

vue-router

examples with vue-router
Vue
4
star
83

woocommerce-quick-order

Quickly create order for new and existing users with flat discount and coupon codes
PHP
4
star
84

fake-data-generator-from-schema

Generate fake data from a schema using Faker.js
JavaScript
4
star
85

shared-login

[WordPress Plugin] - Create magic login URLs to allow users to login without username and password with various restrictions
JavaScript
4
star
86

phpflickr

flickr api wrapper
PHP
4
star
87

wpcookbook

WordPress Tips & Tricks
3
star
88

web2copy

Web2Copy - From Web to Copy.com Storage Service http://web2copy.com
PHP
3
star
89

issuemattic

wordpress issue tracker theme
JavaScript
3
star
90

meteor-bookmarks-app

A small meteor app which allows anyone to create a URL bookmark site with tags
CSS
3
star
91

RepeatableMetaGroup

Easily create repeatable meta field groups with this RepeatableMetaGroup plugin
PHP
3
star
92

precompiled-brotli-modules-for-nginx

2
star
93

jFlickrPicker

display a small gallery from any flickr user's photo stream to select any numbers of phots
2
star
94

backbone-tutorial

BackBone Tutorial
JavaScript
2
star
95

reverseslide

slide two adjacent slides in opposite direction
2
star
96

xpens.net-website

HTML
2
star
97

course-player-markup

HTML
2
star
98

phonetic-bangla

Just a temporary repo for the phonetic-bangla script
JavaScript
2
star
99

oop-in-php

just some example files for a group of students learning oop in php
PHP
2
star
100

drunk

Simple minimalist WordPress theme
PHP
1
star