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 and see the Changelog for 2.9.
For Version 2.9, the database version (db_version in wp_options) changed to 12329, and the Trac revision was 12455.
Highlights
- Requires MySQL 4.1.2 or greater (old requirement was MySQL 4.0 or greater).
New Features
User Features
- Trash status for posts, pages, and comments (includes restore and permanent delete)
- Add support for ‘include’ and ‘exclude’ to (Gallery Shortcode)
- Allow user registration to be enabled by an XMLRPC client
- Add support for sticky posts to the WXR exporter and importer
- ‘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 based on ‘category-slug’ as well as ‘category-id’ (Ticket 10614)
- Support location of tag templates based on ‘tag-id’ as well as ‘tag-slug’ (Ticket 10868)
- Support location of page templates 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
- 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 bookmarklet fixes
- Give plugins and themes simple control over the text displayed at the end of an autogenerated 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 with oEmbed support (see Ticket #10337) (oEmbed discovery disabled by default, use plugin 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()
- Adjust comment moderation keyboard shortcut keys ‘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
- Display better information about broken themes when there is no stylesheet
- Improve situation when tables such as 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
- Added ‘excerpt_more‘ filter to wp_trim_excerpt() function, which allow developers to change excerpt ‘[…]’ more string (Ticket 10395)
- Add ‘smilies_src‘ filter so plugins can better add smilies
- Canonical redirects for post name queries
- Allow _wp_get_comment_list() to handle custom comment types
- Return an empty array instead of false for 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‘ 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() before 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() 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
- Allow a plugin to do a complete takeover of Post by Email
- Logarithmic scale for tag cloud
- Pass Post ID to the ‘get_comments_number‘ filter
- Always filter the url in the media upload form
- Add a ‘the_terms‘ filter
- is_blog_installed() improvements
- Allow force_ssl_admin() 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() and sanitize_user_field()
- Use null instead of 0 when setting content length
- Include ‘hidden’ directories in filesystem dirlist by default
- Pass args array to ‘wp_list_pages‘ filter
- Actions for taxonomy updates
- Key should be ‘comment_id’ not ‘post_id’ in comments table
- Add get_delete_post_link () to retrieve delete posts link for post
- Add ‘separator’ parameter to wp_tag_cloud() and wp_generate_tag_cloud() functions (Ticket 10315)
- Added add_comment_meta() family of functions
- Use a post_parent of 0 instead of -1 to indicate unattached posts
- Improve get_page_hierarchy() function
- Deprecate the_content_rss(), add the_content_feed() and get_the_content_feed(). Convert places that called the_content_rss()with an excerpt length to the_excerpt_rss(). Remove the rss_excerpt_length option. Use the_content_feed() where the_content()was previously used in feeds.
- Add ‘pad_counts’ argument to wp_dropdown_categories()
- Remove codepress
- Remove the php-gettext library
- Canonical post thumbanils
- Add a filter to 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() 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() and wp_kses_data() for filtering unescaped data
- Add ‘orderby=comment_count’ argument to 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()
- Add number of Embed 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() 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() in a variety of flexible ways
- Mark _c() as deprecated. The new _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