Version 3.0

On June 17, 2010, WordPress Version 3.0, named for Thelonious, was released to the public. For more information on this enhancement and bug-fix release, read the WordPress Blog and see the Changelog for 3.0.

For Version 3.0, the database version (db_version in wp_options) changed to 15260, and the Trac revision was 15274.

Highlights Highlights

  • WordPress and WordPress MU have merged – allowing the management of multiple sites (called Multisite) from one WordPress installation.
  • New default theme “Twenty Ten” – takes full advantage of the current features of WordPress.
  • New Custom Menu Management feature – allows creation of custom menus combining posts, pages, categories, tags, and links for use in theme menus or widgets.
  • Custom Header and Custom Background APIs.
  • Contextual help – help text accessed under the Help tab of every screen in the WordPress administration.
  • Ability to set the admin username and password during installation.
  • Bulk updating of themes – with an automatic maintenance mode during the process.
  • Support for Shortlinks.
  • Improved Custom Post Types and Custom Taxonomies – including hierarchical (category-style) support. (Try the Custom Post Type UI or GD Custom Posts And Taxonomies Tools plugins to see the possibilities.)
  • A lighter admin color scheme – to increase accessibility and put the focus more squarely on your content.

Top ↑

User Features User Features

General General

  • Check required php and mysql versions in the update and notify if the server environment does not meet those requirements
  • New wp_login_form() provides a simple login form for use anywhere
  • New WordPress logo for admin header
  • Place “Search Engines Blocked” mini-alert in the wp-admin header to prevent people from accidentally delisting themselves
  • Remove ‘Turbo’ link from admin header and remove Turbo section from the Tools->Tools panel
  • Renamed various menu items, for example Posts->Edit becomes Posts->Posts, and Links->Edit becomes Links->Links, and so on
  • Revised administration menu icons
  • Revised Gray Admin Color Scheme
  • Revised information in readme.html file
  • Show login form upon email-sent for recover/reset passwords

Top ↑

Dashboard Dashboard

  • Add link so user can visit Dashboard after core upgrade
  • Move Tools->Upgrade menu option to Dashboard->Updates and overhaul of user interface so themes, plugins, and core upgrades under one panel
  • New menu management (navigation) via Menus option under Appearances Menu (#11817)
  • Password nag for newly registered users
  • Split Right Now widget into Content | Discussion

Top ↑

Posts Posts

  • Allow for removing all tags in quick edit
  • Allow themes to style the visual editor with editor-style.css file, using add_editor_style() function
  • Enable custom taxonomy UI for pages as well as for posts
  • Improved revision comparison user interface
  • Shortlinks enabled, but still requires a plugin or theme support to fully realize this feature
  • Added capital_P_dangit() filter to change ‘WordPress’ to ‘WordPress’.

Top ↑

Media Media

  • Add FunnyOrDie.com oEmbed support
  • Allow Deletion of Media Alt text
  • Change Media UI labels from “Post Thumbnails” to “Featured Image”
  • Cleanup of the edit media screen
  • Don’t let “Crunching” overlap image name while uploading
  • Optimize scan for lost attachments
  • Support for additional file type extensions (Changesets 12581 and 13349)

Top ↑

  • Order link categories by name, not count, on Add New/Edit Link page

Top ↑

Comments Comments

  • Add additional columns to the Posts Comments view
  • Allow configuration of number of comments to display Recent Comments dashboard module
  • Block comments for future posts and password protected posts (when password not provided)
  • Change to comments UI to show when a comment is replying to another, and link to the parent comment

Top ↑

Appearance Appearance

Top ↑

Plugins Plugins

  • Add Details and Install Now action links under each plugin listed in Install Plugins
  • Allow Tab indenting, Shift-Tab (outdenting), and multi-line tabbing, in plugin editor
  • Upgrade plugins in bulk from the Plugins->Installed panel (#11542)
  • When deleting plugins, check for uninstall hooks, and warn of data deletion

Top ↑

Tools Tools

  • Add tag-to-category and category-to-tag converters to the Tools panel, add tag-to-category converter links to Posts->Post Tagspanel
  • Clean up OPML link export script
  • Expanded filter criteria in Tools->Export panel
  • Import WordPress fixes notices, attachments, and users
  • Removed Turbo menu item, but because Turbo files weren’t removed, Turbo may still work
  • All importers moved to the plugin repository (e.g. WordPress Importer)

Top ↑

Users Users

  • Allow “No role for this blog” to be chosen in Users->Add New panel
  • Added update_core, list_users, remove_users, add_users, promote_users, edit_theme_options, delete_themesand export Capabilities

Top ↑

Settings Settings

Top ↑

Install Process Install Process

Top ↑

Multisite Multisite

Top ↑

Development, Themes, Plugins Development, Themes, Plugins

  • A better default excerpt; remove multiple white spaces from the excerpt as well as splitting safely on UTF8 strings
  • Add Child theme support for theme header registrations, second call to register_theme_headers() should add more headers, and not replace existing headers.
  • Add add_plugins_page() function to allow adding a submenu to under Plugins menu
  • Add get_search_link() with Permastruct (/search/) support, update get_search_link()get_search_feed_link() and get_search_comments_feed_link()
  • Add is_comment_feed()
  • Add redirect_to and associated filters to registration and password recovery
  • Add a wp_loaded action that fires once WordPress init has finished
  • Add an INDEX on comment_parent (wp_comments table) to speed up wp_delete_comment() and reparenting queries
  • Add argument hide_if_empty to wp_dropdown_categories() to hide dropdown if no terms to display
  • Add argument id to wp_dropdown_users() and wp_dropdown_categories()
  • Add argument post_type to get_page_by_title()
  • Add argument taxonomies to register_post_type()
  • Add argument taxonomy to wp_list_categories() and wp_dropdown_categories() to be custom taxonomy aware
  • Add capability ‘edit_theme_options’ (see developer discussion on this)
  • Add capability ‘list_users’ to provide more controls over listing users vs. editing users
  • Add compatibility code for old themes that relied on templates from the default theme without expressly identifying it as the parent theme (Note: the fallback to these template files is now deprecated and will be removed in a future version)
  • Add custom hierarchical post type support to get_pages()
  • Add defaults for ‘post_content’ and ‘post_title’ in wp_insert_post()
  • Add email and login duplicate checking to wp_insert_user()
  • Add extra hooks to “Right Now” dashboard widget
  • Add filter to the links in paginate_links() and to the arguments in wp_link_pages()
  • Add filter post_updated_messages to allow changes to the $messages array in wp-admin/edit-form-advanced.php
  • Add filter post_updated action fires when a post is updated; post ID, current and previous post objects are passed and wp_check_for_changed_slugs() updated to use new hook
  • Add flag to taxonomy registration allowing permalinks to be prepended with front, or not
  • Add initial WP_DEBUG define to wp-config-sample.php and suggest plugin/theme developers use it
  • Add mobile webkit styles for twentyten theme
  • Add more orderby and select options to get_comments
  • Add Multisite capabilities (#11644)
  • Add new protocols for kses and make the list of protocols filterable
  • Add optional comment ID argument to comment template functions
  • Add replace method to $wpdb (#10864)
  • Add support to get_terms() to allow ‘include’ & ‘exclude’ args to be arrays()
  • Add support to is_singular() to allow testing of specific post_types such as is_singular(‘book’) or is_singular( array( ‘newspaper’, ‘book’ ) )
  • Add the generator element in feeds through the {rss2|atom|rdf|rss|opml}_head hooks
  • Add ‘themes_loaded’ hook to run after parent/child themes have been included
  • Add ?ver=DATE query strings to all images that changed since 2.9, to expire browser cache and bump versions on all CSS/JS files modified in that process
  • Admin support for Custom Post Types (#9674)
  • Admin support for hierarchical taxonomies (#10122)
  • Allow Custom Post Types to have custom icons
  • Allow enabling/disabling title and editor per post type, introduce remove_post_type_support(), add enable/disable for author override
  • Allow include/exclude arguments for get_posts() and get_pages() to be an array
  • Allow methods to be used as a callback in wp_unique_filename()
  • Allow more special characters in wp_generate_password()
  • Allow multiple To: recipients in wp_mail() and improve handling of \r\n in headers and multiple CC/BCC headers
  • Allow people to attach PHP 5.3 Closures to filters and actions
  • Allow plugins to modify the query run by WP_User_Search
  • Allow themes to specify a menu fallback other than wp_page_menu()
  • Better inline documentation for WP_DEBUGWP_DEBUG_DISPLAY, and WP_DEBUG_LOG.
  • Better POST_BY_EMAIL logic
  • Check PHP and MySQL versions in upgrade.php
  • Convert Terms page to use WP_Ajax_Response(), hierarchical terms will now appear under their parent OR have the parents prefixed (Changeset 13086)
  • Create metaboxes for hierarchical taxonomies
  • Create post_status=auto-draft when creating a new post item and status changes to draft on first auto-save
  • Customizable death (wp_die() is now pluggable) (#11892)
  • Deprecate get_alloptions()
  • Deprecate get_profile() for get_the_author_meta()
  • Deprecate trackback_rdf() (#11139)
  • Deprecate add_option_update_handler() and remove_option_update_handler() in favor of register_setting() and unregister_setting()
  • Deprecate automatic_feed_links() in favor of add_theme_support(‘automatic-feed-links’)
  • Deprecate get_bloginfo(‘text_direction’) in favor of is_rtl()
  • Deprecate set_current_user() in favor of wp_set_current_user()
  • Deprecate MagpieRSS in favor of Simplepie (#11982)
  • Deprecate Snoopy
  • Deprecate User Levels (use Roles and Capabilities instead) (#10805)
  • Deprecate clean_url() in favor of esc_url() and esc_url_raw() (#12309)
  • Deprecate VHOST in favor of a boolean, SUBDOMAIN_INSTALL (Note: core will keep VHOST defined for plugins’ sake, but you should only define SUBDOMAIN_INSTALL; will throw notice if VHOST is defined, and a warning if they somehow conflict; sunrise can still handle them
  • Deprecate is_term and is_taxonomy in favor of term_exists and taxonomy_exists
  • Don’t check for the existence of index.php in the htaccess rewrite rules
  • Don’t query against entire users table in wp_dropdown_users()
  • Don’t require a default category for post types other than ‘post’
  • Ensure that for multiple sidebar additions, the ID is unique
  • Extend the_modified_date() to support before/after/echo
  • Fallback to wp_page_menu() from wp_nav_menu() if no menus are setup
  • Fix Press This entity encoding
  • Fix DST/Standard transition display in Settings->General
  • Fix recursive chmod for WP_Filesystem
  • Flag post statuses as public, private, protected, or internal
  • Functon get_usernumposts() is now deprecated in favor of count_user_posts() for naming consistency
  • Improve user listing performance
  • In Twenty Ten theme, don’t use post thumbnail as the custom header if it’s smaller than the header size
  • Introduce *_user_meta() functions, deprecate *_usermeta() family
  • Introduce _ex(), a hybrid between _e() and _x(), to translate with context, then echo.
  • Introduce add_editor_style() to easily register a stylesheet for the visual editor
  • Introduce add_permastruct() and flush_rewrite_rules(), wrappers for the corresponding WP_Rewrite methods
  • Introduce disabled() form helper, move selected() and checked() out of wp-admin and into full scope
  • Introduce delete_user_option()
  • Introduce get_available_languages()
  • Introduce get_comment_id_fields() to get comment_id_fields() and introduce a filter on the output to add extra fields
  • Introduce get_index_template() to allow child themes to override a parent theme’s index.php
  • Introduce get_intermediate_image_sizes() for getting all the intermediate image sizes to be used both when adding attachements and deleting
  • Introduce get_post_types() function to get a list of registered post types
  • Introduce get_super_admins() and allow hard-coding a global super_admins array and bypassing site options
  • Introduce get_taxonomies() function to get a list of all registered taxonomies (#12516)
  • Introduce get_template_part() function to include generic files (other than header, sidebar, footer) (#13146#13816)
  • Introduce get_term_feed_link() and use it in wp_list_categories()
  • Introduce get_the_author_link()
  • Introduce get_the_date()
  • Introduce home_url()
  • Introduce is_child_theme()
  • Introduce is_post_type_hierarchical() to use to check if a post type support hierarchical
  • Introduce is_rtl() and becomes defined when locale is loaded
  • Introduce is_super_admin()
  • Introduce is_textdomain_loaded()
  • Introduce menu_page_url() for plugins to use to get the URL for the pages they have added
  • Introduce register_admin_color_schemes() to registers the default admin color schemes
  • Introduce remove_theme_support()
  • Introduce post_type_exists()
  • Introduce sanitize_key()
  • Introduce set_current_screen(). Set current screen for inline edit ajax requests so post rows can be properly displayed.
  • Introduce taxonomy_exists() to replace is_taxonomy()
  • Introduce term_exists() to replace is_term()
  • Introduce the_shortlink() template tag (#10640)
  • Introduce unload_textdomain() and add plugin_locale and theme_locale filters to load_*_textdomain() functions
  • Introduce unregister_theme_headers()
  • Introduce update_blog_details()
  • Introduce wp_check_filetype_and_ext() to handle mime/ext image comparisons and corrections for upload and sideload
  • Introduce wp_reset_postdata() to reset the post global for the current query_posts() call after using a loop with a new WP_Query object
  • Introduce constant DISALLOW_FILE_MODS for disabling all ops that modify core, theme, or plugins files
  • Introduce constant DISALLOW_FILE_EDIT flag for enabling/disabling the theme and plugin editors
  • Introduce constant DISALLOW_UNFILTERED_HTML to disallow unfiltered_html for all users, even admins and super admins
  • Introduce constant SUBDOMAIN_INSTALL boolean to replace VHOST
  • Introduce constant WP_DEFAULT_THEME to use to set ‘default’ theme when installing new sites
  • Introduce Custom Taxonomies translation strings
  • Introduce theme compatibility files so incomplete themes that need to inherit templates will inherit them from wp-includes/theme-compat
  • Introduce WP_User::for_blog() and current_user_can_for_blog() to avoid calls to WP_User::_init_caps()
  • Introduce wpdb::tables() to fetch table names on a global or blog scope
  • Introduce ZipArchive version of unzip_file() (more efficient on memory usage for supporting hosts)
  • Make get_bloginfo(‘wpurl’) use site_url(), not get_option(‘siteurl’)
  • Make better use of $wp_query->get_queried_object()
  • Make calendar valid HTML 5
  • Merge clear_global_post_cache() into clean_post_cache()
  • Merge Categories/Hierarchical taxonomies into edit-tags.php
  • Merge edit-page-form.php into edit-form-advanced.php
  • Merge edit-pages.php into edit.php
  • Merge page.php into post.php
  • Merge page-new.php into post-new.php
  • More powerful version of is_tax()
  • Move send_nosniff_header() into wp-includes so it can be used in wp-ajax.php
  • New $required_mysql_version global in wp-db.php
  • New comment_form() that outputs a complete commenting form for use within a template (#10910)
  • New posts_search filter in query.php
  • Numerous functions deprecated and changes to not use those deprecated functions
  • Optimize single_post_title()single_tag_title() & single_cat_title() to use WP_Query globals if available
  • Pass default post to default_contentdefault_title, and default_excerpt filters, to allow filtering by post_type and other attributes
  • Prevent page(\d+) slugs, and force a suffix
  • Recommended reading from a theme developer’s view regarding navigation menus; see Ryan Boren’s recommendation
  • Redirect ?page_id=xx for the Posts page to the posts page
  • Refactor get_available_languages() to use glob() instead of *dir functions
  • Reminder that escaping rules for options and transients changed so see Ryan Boren’s explanation
  • Reminder to plugin authors to test and make sure they do not generate unexpected output; see Ryan Boren’s explanation
  • Remove STYLE_DEBUG constant, SCRIPT_DEBUG now handles both scripts and CSS
  • Remove wp-ajax.php. admin-ajax.php can be used (and is better for) for front-end/nopriv AJAX requests
  • Rename get_post_link() to get_post_permalink() to avoid conflict with bbPress
  • Rename the new ‘themes_loaded’ hook to ‘after_setup_theme’ to prevent confusion as to what it actually does & where its fired from
  • Revised Coding Standards: no camelcase variables, use lowercase for variables
  • Serve a real 404 for ?p=does-not-exist, ?cat=does-not-exist, etc
  • Show custom hierarchical taxonomies in the menus
  • Show theme installer only to super admins
  • Suffix and version bump for ie.css
  • The Settings API now supports automatic error display for validation problems with add_settings_error() (#11474)
  • Tidy up logic for defining WP_DEBUG
  • Update wp_popular_terms_checklist() to handle custom taxonomies
  • Update jQuery to 1.4.2 (#12305)
  • Update jQuery UI to 1.7.3
  • Update json lib
  • Update phpass to 0.2
  • Update Prototype.js to 1.6.1
  • Update Scriptaculous.js to 1.8.3
  • Update SWFobject JS to 2.2
  • Update wp_clear_scheduled_hook calls to use array when passing args
  • Use admin_url() for images in wp-admin, to allow for filtering
  • Use get_terms() in wp_count_terms()
  • Various phpDoc updates
  • Various changes to wp-includes/http.php

Top ↑

Features Deferred to Later Versions Features Deferred to Later Versions

These features didn’t make it into current release and have been designated for a future release.

  • Overhaul of user roles
  • Media uploader improvements