- 1 Theme Review
- 2 Version Specific Changes
- 3 The Theme Review Process and Scope
- 4 Responding to a Review
- 5 Guidelines
- 6 Theme Obsolescence
- 7 How To Become a Theme Reviewer
- 8 Resources
(Last Edited: 2010-08-30)
Version Specific Changes
Upon the release of each new version of WordPress, the Theme review process will be updated. To ensure newly submitted themes support current WordPress features and functionality, all Themes submitted one month after a new WordPress version must support the updated review criteria.
See the list of WordPress version-specific theme review criteria changes.
The Theme Review Process and Scope
- The Theme directory is a repository of GPL (or compatible) licensed WordPress Themes. The review process, by community members, ensures Themes conform to modern web standards, WordPress standards, and are, in general, of high quality.
- Once a Theme author is ready to release a Theme to the public, they can upload it to the directory system. Be sure your Theme meets the Guidelines below, and test your theme with the Theme Unit Test before you upload your Theme.
- Submitted Themes are automatically checked to make sure they meet a few basic requirements.
- Theme authors receive an automated e-mail message, indicating that their Theme files have been received.
- Submitted Themes are assigned a ticket in the Theme Review Trac system, and entered into a review queue.
- Theme reviewers test Themes, using the method described below.
- While the goal of the design review is to ensure that Themes are functional and meet standards much of the review will surround technical issues. Themes will be checked for other factors, such as ensuring that all standards are met to a satisfactory standard, and that designs are logical, and user-friendly.
- Theme reviewers will provide feedback to Theme authors in a timely manner; and, Theme authors will have the opportunity to revise their Themes at any time.
- Theme reviewers will either approve Themes or contact Theme authors with feedback and/or questions.
- Theme authors can submit any changes via the upload page they used when they initially uploaded the Theme, either before or after a Theme has been approved.
- If a Theme is not initially approved, Theme authors can rework the Theme and resubmit it.
If you have any questions or suggestions about the process, don't hesitate to contact us. Thank you for your contributions!
Responding to a Review
Note: this section is currently being drafted. Consider it as such until this notice is removed.
A theme will be held for approval until items listed as Required are addressed. Once these issues have been resolved, please re-submit your Theme using the uploader tool, a new Trac ticket will be generated. Also note, re-submitted Themes are given priority over newly submitted Themes to help speed up the process and insure timely updates are available to end-users.
Theme developer questions, comments, and feedback are always welcome ... and encouraged!
Please use one of the following methods:
- Leave a comment on the appropriate Trac ticket(s) related to the theme;
- Email the theme-reviewers email list (you may need to join first); or,
- Use the #wp-themes channel on irc.freenode.net where you can find the Theme Review team.
- Themes must meet guidelines current as of the time of Theme submission
- Guidelines are updated following a major WordPress version release
Review Theme Development, WordPress Coding Standards, CSS Coding Standards/en, and Site Design and Layout for WordPress Theme code standards and best practices. Try to test your Theme across browsers/en to catch at least a few of the problems/en the users of the Theme may find later.
- Themes are required not to have any notices, warnings, errors; or use of deprecated functions. Test using one of the following methods:
- Themes are required to utilize current recognized version(s) of (X)HTML and CSS. Test using one of the following methods:
- Themes are required to have a valid HTML document HEAD:
- Valid DOCTYPE declaration
- <html> tag includes language_attributes()
- Correct XFN profile link in <head> tag: <head profile="http://gmpg.org/xfn/11">
- Correct content-type meta declaration: <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" /> OR <meta charset=<?php bloginfo('charset'); ?> declared before <title>
- <title> includes bloginfo() for title and description, as appropriate
Theme is required to incorporate the following WordPress core functionality:
- Automatic Feed Links:
Theme is recommended to incorporate the following WordPress core functionality, but is not required to do so. However, if incorporated, functionality must support the core WordPress implementation:
- Navigation Menus:
- Post Thumbnails:
- Custom Header:
- Custom Background:
- Visual Editor CSS:
Template Tags and Hooks
All template tags and hooks used in a Theme are required to be implemented properly.
The following template tags and hooks are required to be included where appropriate:
- wp_head()/en – (immediately before </head>)
- body_class() – (inside <body> tag)
- paginate_comments_links()/en, or previous_comments_link()/en/next_comments_link()/en
- wp_footer()/en – (immediately before </body>)
Standard template files, if incorporated into the Theme, are required to be called using the correct template tag:
- Header: get_header()/en
- Sidebar: get_sidebar()/en
- Footer: get_footer()/en
- Comments: comments_template()/en
- Search Form: get_search_form()/en
- Login Form: wp_login_form()
- Custom Theme template files: get_template_part()
include( TEMPLATEPATH . '/file.php' )should not be used to call Theme template part files, unless absolutely necessary.
Site information, if incorporated into the Theme, is required to be called using the correct template tag:
(This list is not exhaustive. Refer to bloginfo() for the full list)
Note: this section is currently being drafted. Consider it as such until this notice is removed.
- Home URL: bloginfo( 'url' )
Note: Themes are recommended to use home_url()
- WordPress URL: bloginfo( 'wpurl' )
Note: Themes are recommended to use site_url()
- Site Title: bloginfo( 'name' )
- Site Description: bloginfo( 'description' )
- Style Sheet Directory URL: bloginfo( 'stylesheet_directory' )
Note: Themes are recommended to use get_stylesheet_directory()/en
- Style Sheet URL: bloginfo( 'stylesheet_url' )
Note: Themes are recommended to use get_stylesheet_uri()/en
- Parent Theme Directory URL: bloginfo( 'template_directory' ) or bloginfo( 'template_url' )
Note: Themes are recommended to use get_template_directory()/en
- Parent Theme Name: get_template()/en
- Character Set: bloginfo( 'charset' )
- HTML type: bloginfo( 'html_type' )
- Language: bloginfo( 'language' ) (en-US) or get_locale()/en (en_US)
- Text Direction: bloginfo( 'text_direction' )
Note: Themes are recommended to use is_rtl()/en for conditional statements
- WordPress Version: bloginfo( 'version' )
- Feed Links: bloginfo( 'feed_url' ) (where feed_url is rss_url, rss2_url, atom_url)
Note: Themes are recommended to use get_feed_link( 'feed' )/en (where <tt>feed is rss, rss2, atom)
WordPress-Defined CSS Classes
- Alignment Classes:
- .aligncenter, div.aligncenter
- Caption Related Classes:
- .wp-caption img
Themes should also support these common classes:
- Post Classes:
- Comment Classes:
Theme Template Files
Theme is required to include, at a minimum:
- screenshot.png (this should be a "reasonable facsimile" of the Theme after it is initially activated with default options)
Theme is recommended to include:
- sidebar.php (or appropriate variations such as: sidebar-left.php; sidebar-right.php; sidebar-footer.php; etc.)
Theme may optionally include:
Submitted theme are required not to include files named like the following:
Note: The reason to avoid this template naming convention for publicly released Themes is to avoid surprising users that create a page with the "-foobar" slug and expect the default template. See Template_Hierarchy#Page_display.
- Themes, including all PHP, HTML, CSS, images, fonts, and icons, are required to be 100% GPL-licensed, or use a GPL-compatible license.
- Themes are required to declare their license explicitly, using one of the following methods:
- Adding License and License URI header slugs to style.css
- Including a license.txt file with the Theme
- Use this formatting for license information as in this example:
License: GNU General Public License v2.0 License URI: http://www.gnu.org/licenses/gpl-2.0.html
- GPL-Compatible Font Licenses
- Fonts bundled with Themes submitted to the WordPress Theme directory are required to be licensed under one of the following font licenses:
- Arphic Public License (Arphic)
- Baekmuk License (Baekmuk)
- Bitstream Vera License (Bitstream Vera)
- Creative Commons Attribution License (CC-BY)
- GNU GPL (with font exception) (GPL)
- GUST e-Foundry Font License/LaTeX Project Public License (LPPL)
- IPA Font License (IPA)
- Liberation Font License (Liberation)
- LaTeX Project Public License (LPPL)
- mplus Font License (mplus)
- ParaType Font License (PTFL)
- SIL Open Font License (OFL)
- STIX Fonts User License (STIX)
- Wadalab Fonts License (Wadalab)
- XANO Mincho Font License (XANO)
- GPL-Compatible Icon Sets
- Some compatible icon sets include the following:
- WooCons Set #1 (GPL)
- Gallery2 Icons (GPL)
- Lullacons Pack #1 (GPL)
- Human O2 Grunge (GPL)
- GNOME Desktop Icons (GPL)
- Elegant Media Icons (GPL)
- Humility Icons (GPL)
- Crystal Icons (GPL)
- Flat For Linux (GPL)
- Ultimate GNOME Icons (GPL)
- Shrunk Pidgin Smilies (GPL)
- Twotiny Icons (GPL)
- Web Design Creatives (GPL)
- realistiK Reloaded (GPL)
- Carpelinx (GPL)
- DarkGlass Reworked (GPL)
- Lynx Black (GPL)
- KDE Crystal Diamond (GPL)
- Oxygen (GPL)
Please be clear about the following in your Theme documentation (a README file included with your Theme helps many users over any potential stumbling blocks):
- Indicate precisely what your Theme and template files will achieve.
- Adhere to the naming conventions of the standard Theme hierarchy.
- Indicate deficiencies in your Themes, if any.
- Clearly reference any special modifications in comments/en within the template and stylesheet files. Add comments to modifications, template sections, and CSS styles, especially those which cross template files.
- If you have any special requirements, which may include custom Rewrite Rules, or the use of some additional, special templates, images or files, please explicitly state the steps of action a user should take to get your Theme working.
- Provide contact information (website or email), if possible, for support information and questions.
- Themes may optionally designate Author URI and Theme URI in style.css.
- Theme URI, if used, is required to link to a page specifically related to the Theme.
- Author URI, if used, is required to link to an author's personal web site or project/development website.
- Themes are recommended to provide at least one of these two links, in order to ensure Theme users have a point of contact for the Theme developer.
- Themes may optionally include a public-facing credit link in the Theme footer.
- If used, Themes are required to include no more than one such footer credit link.
- Footer credit link, if used, is required to use either Theme URI or Author URI.
- Any exception to these requirements must be approved by the Theme Review team.
- In all cases, credit link anchor text and title are required to be accurate, appropriate with respect to the linked site. SEO-seeded anchor text and titles will subject Themes to automatic rejection.
- Since Themes are GPL (or compatible), Theme authors are prohibited from requiring that these links be kept by Theme users. An appropriate way to ask for Theme users to keep a link to the author's website is as follows: "It is completely optional, but if you like the Theme I would appreciate it if you keep the credit link at the bottom."
Theme Unit Tests
The Theme must meet all the requirements of the Theme Unit Test.
- Themes must be kept current once submitted.
- Any Theme not updated to the current theme review process as of the most recent release of WordPress may be subject to temporary suspension.
How To Become a Theme Reviewer
Are you interested in joining the Theme Reviewers team? Great! The team is open to anyone who wants to help out, and the process is simple:
- Join the Theme Reviewers mail list.
- Setup a WordPress test environment, and import the Theme Unit Test data. Be sure to set WP_DEBUG to 'true' in wp-config.
- Install the Log Deprecated Notices plugin on your WordPress test environment.
- Pick the oldest unclaimed Theme from the Theme Review Trac Queue; and, "reassign to" your Trac username
- Using the SVN link in the Trac ticket, download the Theme files, and install/activate the Theme on your WordPress test environment.
- Review the Theme per the process, ensuring the Theme meets the criteria as well as the Theme Development standards.
- Attach your Theme review notes as a comment on the ticket.
- Set the “resolve as” option to “suggest-approval” for inclusion in the Theme directory; or, “not-accepted” if the Theme does not meet the necessary review criteria and standards.
Helpful Codex Links
- Theme Development
- Template Hierarchy
- Theme Unit Test
- WordPress Coding Standards
- CSS Coding Standards /en
- Site Design and Layout
- CSS Fixing Browser_Bugs /en
- CSS Troubleshooting /en
Code Validation Links
PHP/WordPress Validation Tools
- Log Deprecated Notices plugin (Logs notices of deprecated WordPress functions found in Themes/Plugins)
- Debogger plugin (Reports PHP errors and XHTML validation status)