Title: Version 2.9
Published: May 19, 2019

---

# Version 2.9

## In this article

 * [Highlights](https://wordpress.org/documentation/wordpress-version/version-2-9/?output_format=md#highlights)
 * [New Features](https://wordpress.org/documentation/wordpress-version/version-2-9/?output_format=md#new-features)
    - [User Features](https://wordpress.org/documentation/wordpress-version/version-2-9/?output_format=md#user-features)
    - [Development, Themes, Plugins](https://wordpress.org/documentation/wordpress-version/version-2-9/?output_format=md#development-themes-plugins)

[ Back to top](https://wordpress.org/documentation/wordpress-version/version-2-9/?output_format=md#wp--skip-link--target)

On December 18th, 2009, WordPress **Version 2.9**, named for Carmen McRae, was released
to the public. For more information on this enhancement and bug-fix release, read
the [Development Blog](https://wordpress.org/news/2009/12/wordpress-2-9/) and see
the [Changelog for 2.9](https://codex.wordpress.org/Changelog/2.9).

For **Version 2.9**, the database version (**db_version** in **wp_options**) changed
to 12329, and the [Trac](https://core.trac.wordpress.org/) revision was [12455](https://core.trac.wordpress.org/changeset/12455).

 * [View Open Tickets](https://trac.wordpress.org/query?status=new&status=assigned&status=reopened&milestone=2.9)
 * [View Closed Tickets](https://trac.wordpress.org/query?status=closed&milestone=2.9)

## 󠀁[Highlights](https://wordpress.org/documentation/wordpress-version/version-2-9/?output_format=md#highlights)󠁿

 * Requires [MySQL](https://codex.wordpress.org/Glossary#MySQL) 4.1.2 or greater(
   old requirement was MySQL 4.0 or greater).

## 󠀁[New Features](https://wordpress.org/documentation/wordpress-version/version-2-9/?output_format=md#new-features)󠁿

### 󠀁[User Features](https://wordpress.org/documentation/wordpress-version/version-2-9/?output_format=md#user-features)󠁿

 * [Trash status](https://codex.wordpress.org/Trash_status) for posts, pages, and
   comments (includes restore and permanent delete)
 * Add support for ‘include’ and ‘exclude’ to ([Gallery Shortcode](https://codex.wordpress.org/Gallery_Shortcode))
 * Allow user registration to be enabled by an [XMLRPC](https://codex.wordpress.org/index.php?title=XMLRPC&action=edit&redlink=1)
   client
 * Add support for sticky posts to the WXR [exporter](https://codex.wordpress.org/Tools_Export_SubPanel)
   and [importer](https://codex.wordpress.org/Tools_Import_SubPanel)
 * ‘rel=canonical’ for singular pages
 * Scroll back to the same location after saving a file in the Plugin and Theme 
   editors
 * Correct comments and remove unnecessary echos from the default themes sidebar
   template file
 * Enable the APP (Atom) attachment file download to work correctly
 * Support location of [category templates](https://codex.wordpress.org/Template_Hierarchy#Category_display)
   based on ‘category-slug’ as well as ‘category-id’ ([Ticket 10614](https://core.trac.wordpress.org/ticket/10614))
 * Support location of [tag templates](https://codex.wordpress.org/Template_Hierarchy#Tag_display)
   based on ‘tag-id’ as well as ‘tag-slug’ ([Ticket 10868](https://core.trac.wordpress.org/ticket/10868))
 * Support location of [page templates](https://codex.wordpress.org/Template_Hierarchy#Page_display)
   based on ‘page-slug’ and ‘page-id’
 * Set “Allow my blog to appear in search engines” to checked in installation
 * Don’t offer to make a category its own parent
 * Remove Sphere from search list
 * Minify admin CSS
 * Show correct max upload filesize error message
 * Add ‘rel’ attribute to [next/previous post links](https://codex.wordpress.org/Next_and_Previous_Links)
 * Make the default and classic themes comment textareas valid XHTML
 * Clean up ‘.button’ and ‘.button[disabled]’ CSS classes, add ‘spinner’ and ‘gray-
   out’ buttons after clicking Publish or Update post
 * Fix race condition with autosave when clicking Publish immediately after entering
   post title
 * Add Comments for Pages in the WordPress Default theme
 * Define ‘$content_width’ for Kubrick
 * Better feedback on publishing of future posts and pages
 * Display comments in descending date order, consistently
 * Add means of automatically repairing tables
 * [Press This](https://codex.wordpress.org/Press_This) bookmarklet fixes
 * Give plugins and themes simple control over the text displayed at the end of 
   an autogenerated [Excerpt](https://codex.wordpress.org/Excerpt)
 * Don’t show “Change Permalinks” button when editing the page set as “Front page”
 * Image editing
 * Retire BunnyTags importer
 * Retire Jerome’s keywords importer
 * Explain that the permalink is temporary for autosave generated permalinks
 * Update SimplePie to 1.2
 * Eliminate the redundant and confusing comment threading depth of 1
 * Easier [Embeds](https://codex.wordpress.org/Embeds) with oEmbed support (see 
   [Ticket #10337](https://core.trac.wordpress.org/ticket/10337)) (oEmbed discovery
   disabled by default, use [plugin](https://wordpress.org/extend/plugins/enable-oembed-discovery/)
   to enable it)
 * TinyMCE 3.2.7
 * Remove rel=’tag’ on links in Tag Clouds
 * Add a title to the Home link output by [wp_page_menu()](https://codex.wordpress.org/Template_Tags/wp_page_menu)
 * Adjust comment moderation [keyboard shortcut keys](https://codex.wordpress.org/Keyboard_Shortcuts)‘
   d = trash’ or delete depending on the screen
 * Show “Draft updated” instead of “Post updated” when saving draft
 * Show the login form in a popup when autosave hits the login grace period
 * Open View/Preview post in a new window from the link in the Saved/Updated message
 * Separate fields for ‘image alt’ and ‘image caption’ in [Media uploader](https://codex.wordpress.org/Media_Add_New_SubPanel)
 * Display better information about broken themes when there is no stylesheet
 * Improve situation when tables such as [wp_options](https://codex.wordpress.org/Database_Description#Table:_wp_options)
   table were ‘corrupt’ new installation message was offered. Add means of automatically
   repairing tables
 * Export and import custom taxonomies
 * Admin copy improvements
 * Don’t show page templates in the drop down if they are in a subdirectory
 * Make codex link open in a new window
 * Change ‘Remove’ link on widgets to ‘Delete’ because it doesn’t just remove it,
   it deletes the settings for that widget instance.

### 󠀁[Development, Themes, Plugins](https://wordpress.org/documentation/wordpress-version/version-2-9/?output_format=md#development-themes-plugins)󠁿

 * Added ‘[excerpt_more](https://codex.wordpress.org/Plugin_API/Filter_Reference/excerpt_more)‘
   filter to [wp_trim_excerpt()](https://codex.wordpress.org/Function_Reference/wp_trim_excerpt)
   function, which allow developers to change excerpt ‘[…]’ more string ([Ticket 10395](https://core.trac.wordpress.org/ticket/10395))
 * Add ‘[smilies_src](https://codex.wordpress.org/index.php?title=Plugin_API/Filter_Reference/smilies_src&action=edit&redlink=1)‘
   filter so plugins can better add smilies
 * Canonical redirects for post name queries
 * Allow [_wp_get_comment_list()](https://codex.wordpress.org/index.php?title=Function_Reference/_wp_get_comment_list&action=edit&redlink=1)
   to handle custom comment types
 * Return an empty array instead of false for [get_children()](https://codex.wordpress.org/Function_Reference/get_children)
   when no children found
 * Add some filters so that HTTP requests can be filtered
 * Move plugin update notice output to the plugin specific hook
 * Limit wp-mail ‘blog by email’ checks to every 5 minutes
 * Make it much easier to filter contact methods from user profiles
 * Allow filtering of get_edit_post_link for custom post_type
 * ‘[get_sample_permalink_html](https://codex.wordpress.org/index.php?title=Plugin_API/Filter_Reference/get_sample_permalink_html&action=edit&redlink=1)‘
   filter
 * Enforce activation key to be a string, reject activation keys that are arrays
 * Support for new post types
 * Respect custom post_type in queries
 * Send Retry-After header when in maintenance mode
 * Various WP Filesystem related fixes and documentation
 * Add constants for ftp connections timeouts
 * Increase timeout on cron-based requests when checking for upgrades
 * Don’t use [has_action()](https://codex.wordpress.org/Function_Reference/has_action)
   before [do_action()](https://codex.wordpress.org/Function_Reference/do_action)
   in http.php
 * Speed up jQuery based scripts
 * Use the current user as author for autosave
 * Show My Posts as default view on the Edit Posts screen for users without ‘edit_others_posts’
   cap
 * Ensure that drafts viewed over XMLRPC have a correct gmt date set
 * Pass user id to ‘get_’ the_author_meta filters
 * Move [_wp_get_user_contactmethods()](https://codex.wordpress.org/index.php?title=Function_Reference/_wp_get_user_contactmethods&action=edit&redlink=1)
   into the registrations functions file
 * Machine parseable db error codes
 * Add global JS vars and actions to the media uploader iframe
 * Add JSON compat for PHP < 5.2
 * Make option_name the primary key for the [options table](https://codex.wordpress.org/Database_Description#Table:_wp_options)
 * Allow a plugin to do a complete takeover of Post by Email
 * Logarithmic scale for [tag cloud](https://codex.wordpress.org/Template_Tags/wp_tag_cloud)
 * Pass Post ID to the ‘[get_comments_number](https://codex.wordpress.org/index.php?title=Plugin_API/Filter_Reference/get_comments_number&action=edit&redlink=1)‘
   filter
 * Always filter the url in the media upload form
 * Add a ‘[the_terms](https://codex.wordpress.org/index.php?title=Plugin_API/Filter_Reference/the_terms&action=edit&redlink=1)‘
   filter
 * [is_blog_installed()](https://codex.wordpress.org/Function_Reference/is_blog_installed)
   improvements
 * Allow force_[ssl_admin()](https://codex.wordpress.org/index.php?title=Function_Reference/ssl_admin&action=edit&redlink=1)
   to properly accept false as a value
 * Pass logged_in cookie to async-upload and filter the cookie scheme in auth_redirect()
 * Add more actions around database add/delete/update operations
 * phpDoc for wp_”check|set”_post_lock functions
 * Use the old strings which are more translator friendly and add a generic default
   string to aid re-use by plugins adding post_types
 * Filter fields through kses upon display and introduce [sanitize_user_object()](https://codex.wordpress.org/index.php?title=Function_Reference/sanitize_user_object&action=edit&redlink=1)
   and [sanitize_user_field()](https://codex.wordpress.org/index.php?title=Function_Reference/sanitize_user_field&action=edit&redlink=1)
 * Use null instead of 0 when setting content length
 * Include ‘hidden’ directories in filesystem dirlist by default
 * Pass args array to ‘[wp_list_pages](https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_list_pages)‘
   filter
 * Actions for taxonomy updates
 * Key should be ‘comment_id’ not ‘post_id’ in [comments table](https://codex.wordpress.org/Database_Description#Table:_wp_comments)
 * Add [get_delete_post_link ()](https://codex.wordpress.org/Function_Reference/get_delete_post_link)
   to retrieve delete posts link for post
 * Add ‘separator’ parameter to [wp_tag_cloud()](https://codex.wordpress.org/Template_Tags/wp_tag_cloud)
   and [wp_generate_tag_cloud()](https://codex.wordpress.org/Template_Tags/wp_generate_tag_cloud)
   functions ([Ticket 10315](https://core.trac.wordpress.org/ticket/10315))
 * Added [add_comment_meta()](https://codex.wordpress.org/Function_Reference/add_comment_meta)
   family of functions
 * Use a post_parent of 0 instead of -1 to indicate unattached posts
 * Improve [get_page_hierarchy()](https://codex.wordpress.org/Function_Reference/get_page_hierarchy)
   function
 * Deprecate [the_content_rss()](https://codex.wordpress.org/Function_Reference/the_content_rss),
   add [the_content_feed()](https://codex.wordpress.org/Function_Reference/the_content_feed)
   and [get_the_content_feed()](https://codex.wordpress.org/Function_Reference/get_the_content_feed).
   Convert places that called [the_content_rss()](https://codex.wordpress.org/Function_Reference/the_content_rss)
   with an excerpt length to [the_excerpt_rss()](https://codex.wordpress.org/Function_Reference/the_excerpt_rss).
   Remove the rss_excerpt_length option. Use [the_content_feed()](https://codex.wordpress.org/Function_Reference/the_content_feed)
   where [the_content()](https://codex.wordpress.org/Template_Tags/the_content)was
   previously used in feeds.
 * Add ‘pad_counts’ argument to [wp_dropdown_categories()](https://codex.wordpress.org/Template_Tags/wp_dropdown_categories)
 * Remove codepress
 * Remove the php-gettext library
 * Canonical post thumbanils
 * Add a filter to [the_author_posts_link()](https://codex.wordpress.org/Template_Tags/the_author_posts_link)
 * Merge post.js with page.js and slug.js, optimize categories and tags JS, standardize
   postboxes IDs and JS
 * Introduce [register_theme_directory()](https://codex.wordpress.org/Function_Reference/register_theme_directory)
   which takes a wp-content-relative path and will additionally scan it for themes.
   Plugins can use this to add themes without requiring copying by the user
 * Add set_user_role action hook
 * Allow theme devs to change attrs (like CSS class) of thumbnail images
 * Add wp-post-image CSS class to post images
 * Allow for plugins to enhance the number of metadata fields captured from plugin
   and theme headers
 * Merge updated pomo code
 * Switch to using NOOP_Translations for untranslated sites
 * Improve wptexturize performance
 * Provide context to the strings in the Plugin and Theme installers to allow for
   different grammatical gender
 * Fixes for theme subdir support
 * Introduce [wp_kses_post()](https://wordpress.org/documentation/wordpress-version/version-2-9/_https://codex.wordpress.org/Function_Reference/wp_kses_post?output_format=md)
   and [wp_kses_data()](https://codex.wordpress.org/Function_Reference/wp_kses_data)
   for filtering unescaped data
 * Add ‘orderby=comment_count’ argument to [query_posts()](https://codex.wordpress.org/Template_Tags/query_posts)
 * Honor Post Type for Sticky Posts
 * Allow querying multiple post types
 * Introduce add_theme_support(feature) and current_theme_supports(feature) for 
   announcing and checking theme support for various features
 * Introduce [require_if_theme_supports()](https://codex.wordpress.org/Function_Reference/require_if_theme_supports)
 * Add number of [Embed](https://codex.wordpress.org/index.php?title=Embed&action=edit&redlink=1)
   related filters
 * Add ‘IMAGE_EDIT_OVERWRITE’ constant to control edited image save or replace, 
   most useful for setups that have dynamic image resizing
 * Add [load_child_theme_textdomain()](https://codex.wordpress.org/Function_Reference/load_child_theme_textdomain)
   to allow child themes to have their own translation files
 * Add sidebar descriptions to sidebar settings and widget admin screen
 * Make option_id primary. Add uniques for option_name and autoload
 * Allow plugins to override the behaviour of [load_textdomain()](https://codex.wordpress.org/Function_Reference/load_textdomain)
   in a variety of flexible ways
 * Mark [_c()](https://codex.wordpress.org/Function_Reference/_c) as deprecated.
   The new [_x()](https://codex.wordpress.org/Function_Reference/_x) function should
   be used instead.
 * Allow plugins to change the redirect on post/page publishing/submitting
 * Standardize on ‘user_id’ instead of ‘user_ID’ when passing comment data. Accept
   either ‘user_id’ or ‘user_ID’. Remove ‘user_id’ global.
 * Filter imported comments
 * Introducing set_post_image_size(w, h, crop) so themes can register their special
   size/crop for canonical post images
 * Standardize around “post image” instead of “post thumbnail”
 * Allow registering post image support per post type
 * Return false from is_paged() if on the first page.
 * Check MySQL and PHP versions when auto upgrading
 * Add required php and mysql versions to version.php
 * Hard code required version in update-core.php

First published

May 19, 2019

Last updated