The theme must meet all requirements in the WordPress.org theme review. Along with this, it must also meet the following criteria.

Code

  • Use WordPress functionality and features first, if available (This includes Jetpack features for WordPress.com).
  • No frameworks or options frameworks.
  • No external, non-Automattic (Jetpack, Gravatar, etc.) APIs.
  • Do not include code that won’t run on WP.com. This includes any code for compatibility and the use of IS_WPCOM.
  • Use filters to modify the output of template tags, if available.
  • Use client-side feature detection, rather than server side browser detection.
  • Themes must not directly access PHP super globals.
  • No output buffering.
  • No custom fields or post meta boxes.
  • No removing or modifying Core hooks.

JavaScript

  • Protect function and variable names from conflicts in the global namespace. Always use theme slug prefixes, or wrap code in an immediately invoked function expression (IFFE), like Underscores.

HTML/CSS

  • All themes must use the HTML5 doctype and contain semantic markup.
  • Themes must be responsive and retina-ready.
  • Use !important and inline styles only as a last resort.
  • You can’t include code or scripts for extending support below IE9.

Core Functionality and Features

  • All code and widgets must not replicate existing WordPress.com functionality.
  • Themes must support widgets.
  • Themes must support at least one Custom Menu.
  • No customizing /wp-admin.

Documentation

All premium themes released on WordPress.com have a showcase page and support documentation. Follow the documentation style guide to ensure that users have a clear understanding of a theme’s features, and where to get help.

Language

  •  Provide context where appropriate.
  • Avoid common anti-patterns.
  • Themes must provide right-to-left styles.
  • Translators need to be able to deactivate web fonts that don’t support the character set of their language.

Options and Settings

  • Only implement theme options through the Customizer.
  • Theme options must be in one section, entitled ‘Theme’.
  • No theme options should allow users to add scripts or styles.
  • Themes need to support Jetpack Infinite Scroll.

Stylesheets and Scripts

  • Don’t hook HTML or Javascript into wp_head.
  • No minification; it’s impossible to audit, and WordPress.com has its own minification process.
  • The theme’s primary CSS must be in style.css.
  • Theme tags in style.css must be be lowercase with no spaces. Separate multiple-word tags with a dash.
  • Line heights must be set to relative values, so that Custom Fonts work correctly.
  • Enqueue Google fonts using this format.

Templates

  • Themes must respect the Template Hierarchy.
  • front-page.php must respect the user’s Settings → Reading → Front Page Displays value.
  • $content_width must be set to the theme’s default content width.
  • Use full loops in all templates. Just calling the_post() in a template like single.php or page.php is not enough. This is a great explanatory article.

Queries

  • Themes must use WP_Query.
  • Don’t use unbounded queries. The posts_per_page parameter of WP_Query may not be set to -1. Also, the numberposts parameter of get_posts() (and similar functions) must have a positive value.
  • Themes must not modify the main query.

Widgets

  • Prefix widget titles with the themename, ie. Theme Name: Widget Title.
  • Widget areas must not contain hardcoded widgets.
  • Visible links to feeds must not appear in themes. We suggest that site owners use the Follow Blog Widget on WordPress.com to allow their visitors to subscribe.

Along with these we also recommend the following items.