On June 13, 2012, WordPress Version 3.4, named for guitarist Grant Green, 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.4.
For Version 3.4, the database version (db_version in wp_options) changed to 20596, and the Trac revision was 21076.
Highlights
- Enhanced theme control
- Customize theme options before activating a new theme using Theme Customizer
- Use Theme Previewer to customize current theme without changing the front-end design
- Custom Headers
- Improved Custom Headers with flexible sizes
- Selecting Custom Header Images and Custom Background Images from Media Library Screen
- Media improvements
- Support HTML in image captions
- Under the Hood improvements
- Improvements in WordPress internationalization and localization (more info)
- Different split in translation POT files for faster translations
- Codex XML-RPC information update accessed via XML-RPC_WordPress_API
- WP_Query improvements
User Features
General
- Properly reflect the language on RSS feeds
- Add support for DFW for all instances of the editor
- Update license.txt to include ‘How to Apply These Terms to Your New Programs’ at the request of the FSF https://www.gnu.org/licenses/gpl-2.0.txt
Dashboard
- Dashboard Widgets are available for translation
- Help Tabs improvements
- Remove Recently Updated from Plugins widget
- Add a link to the Customizer from the Admin Bar appearance menu
- Improve the Recent Comments dashboard widget performance on sites with large amounts of comments
Posts
- Add new comment from post edit screen
- Display menu_order value in Quick Edit for non-hierarchical post types
- Change ‘Post Format’ bulk/quick edit label to ‘Format’
Media
- HTML support has been added to image caption field
- Add Twitter.com as an oEmbed providers
Links
- Default Links are now available for translation
Comments
- Remove “Approve” bulk action when viewing spam comments as it isn’t shown in the row actions
Appearance
- Update the Theme Customizer in Twenty Ten and Twenty Eleven themes
- Faster theme searching
- Post formats should show_in_nav_menus when the current theme supports them
- Infinite scroll for themes.php and theme-install.php. Bump per page limit for themes.php to 999
- Add Sort by, and Number of Links to show, to the Links widget
- Introduce new registration methods for custom headers and custom backgrounds
- Default to keyword searches for the theme installer
- Contextual help updates
- Update install screens to use the new stars
Plugins
- Clean up the Plugin installer screenshots page; adds CSS resize support to the images to prevent them requiring scrolling and falling below the FYI box
- Default to keyword searches for the plugin installer
- Update install screens to use the new stars
Tools
- Bump WXR_VERSION because of plugins trac 501867 / r19858 which affects the regex based importer
- Update contextual help
Users
- After adding a user, take them back to users.php with an ‘Edit user’ link in the message
- Correct how “Display name publicly as” works when other name fields change
Settings
- Update color scheme definition for gray admin theme
- Use blue arrows for blue admin’s screen options and help tabs; adjust baseline to be more compatible with Firefox
- Timezone and start of week can now be specify through translated strings (rather than PHP)
Install Process
- Don’t allow empty database prefix for multisite
- Issue an error during the WordPress install process if wp-config.php is configured with an empty database table prefix, which is not supported
- Remove references to specific search engines
Multisite
- Better checking for values for multisite upload limit
- Only allow _multisite_ super admins to demote themselves on a site
- Create a network/about.php page and leverage it, to prevent the dashboard from switching to the blog admin
- Add an “Edit Site” submenu to the admin bar site menu when a super admin visits a blog dashboard
- Autocomplete for add-user screens
- Do not save the last visited tab on the multisite Network Themes page and Site Themes tab
- Make ‘Network Activate’ a bulk action on network/plugins.php
- Increase default upload space for sites on a network from 10M to 100M
- Clean up plugins.php with regards to recently edited files, deactivations, and the network admin
Development, Themes, Plugins
- Add a filter to wp_terms_checklist() that wraps the function’s arguments; mainly designed to allow checked_ontop to be turned off
- Add WP_Screen methods get_help_tabs(), get_help_tab( $id ), get_help_sidebar(). Store help tabs by tab ID, not numeric key; allows proper removal with remove_help_tab( $id )
- Add ‘ep_mask’ as an argument to the ‘rewrite’ array for register_post_type() and register_taxonomy(); keeps ‘permalink_epmask’ compatible as an argument for post type registrations; fixes endpoints for category and tag pages
- Add jQuery UI Touch Punch plugin to handle dragging on mobile devices
- Add post ID argument to _wp_post_thumbnail_html() rather than relying on a global; post the ID from wp_ajax_set_post_thumbnail()
- Add ‘search_columns’ arg to WP_User_Query to allow for explicit column choices; without it columns will be detected based on the search term
- Add the editor ID and the post type (when available) as classes to the TinyMCE’s body
- Add $id parameter to get_the_tag_list() for consistency with get_the_(category|term)_list().
- Allow get_post_meta() to be called with only a post ID, as get_metadata() handles this
- Allow counting by characters in lieu of a word count, for East Asian languages
- Allow toolbar submenus to expand to the width of the parent item
- Allow translators to specify a default timezone string OR GMT offset. Stop doing date(‘Z’)/3600 math for default ‘gmt_offset’
- AtomServer class moved to
wp-includes/class-wp-atom-server.php
- Change the image caption shortcode format to <a><img /></a> caption text + html; that way HTML tags in captions are better supported and the shortcode wouldn’t break when using the wrong quotes
- Check the return of wp_insert_term() for WP_Error or array; prevents fatal errors and failure to add categories when adding terms via ajax
- Cleanup and better document create_initial_taxonomies()
- Clear strict notices for the walkers
- Compress CSS/JS using the latest version of YUI Compressor
- Create WP_Customize_Control to separate the process of rendering a control from fetching, previewing, and saving its value
- Database schema change: Change ‘post_content_filtered’ to longtext in ‘wp_posts’ table
- Database schema change: Drop ‘comment_approved’ index from ‘wp_comments’ table
- Database schema change: Remove ‘blog_id’ column from ‘wp_options’ table
- Define WPINC in wp-load when not set in wp-config.php
- Deprecate add_custom_background() in favor of add_theme_support( ‘custom-background’ )
- Deprecate add_custom_image_header() in favor of add_theme_support( ‘custom-header’ )
- Deprecate display_theme()
- Deprecate get_theme_data() in favor of wp_get_theme()
- Do not block file mod/edit caps when DISALLOW_UNFILTERED_HTML is set; There are separate constants (DISALLOW_FILE_EDIT and DISALLOW_FILE_MODS for those)
- Fix the return value of get_theme_root() when the theme root is outside of WP_CONTENT_DIR, thus making it absolute rather than the typical relative theme root; make get_theme_root_uri() tolerate an absolute path for a theme root; it will now make an attempt to find a corresponding URL for absolute paths as well.
- Fixed “https” detection in feed generator
- Formatting and i18n cleanup of repair.php
- Hash post password in cookies
- Improve adding more css classes to the editor body, add “rtl”, “ie7”, “ie8”, “ie9” so they can be targeted in editor-style.css
- Improve efficiency of make_clickable()
- Improve wp-app.php; put the atom server class in class-wp-atom-server.php; remove log_api calls; update the query filter; replace exit calls with wp_die() for unit test compat; add override handler for wp_die(); allow plugins to replace the atom class
- In case of 404, redirect /login, /dashboard, /admin to corresponding WordPress equivalents
- Introduce $wpdb->delete()
- Introduce set_header_image(), remove_header_image(), reset_header_image() and get_header_image_data()Custom_Image_Header class methods.
- Introduce WP_Theme class, wp_get_themes(), and wp_get_theme() to replace get_themes(), get_theme(), get_theme_data(), current_theme_info(), and others
- Introduce __return_null()
- Introduce display_header_text()
- Introduce get_page_template_slug( $id = null ) to return a page’s template (like “showcase.php”); returns false if post ID is not a page, and an empty string for the default page template; use the function across core
- Introduce sanitize_trackback_urls(); don’t ping bad urls, or save them to the DB
- Introduce term_is_ancestor_of()
- Introduce term_is_ancestor_of(); finish taxonomy support for wp_insert_category()
- Introduce wp_is_mobile() and use it instead of $is_iphone global
- Introduce wp_load_translations_early() which can be used before the locale is properly loaded in order to translate early error strings; internationalize setup-config.php — translators no longer have a reason to modify this file
- Introduce ‘relative’ scheme to return only the paths for home_url, site, admin, network_, and get_ variants
- Introduce WP_Theme->exists() to check if the queried theme actually exist; WP_Theme->exists() is a subset of errors(); a theme with errors may still exist, but a theme that does not exist has an error of theme_not_found; wp_get_theme() now returns false if the theme does not exist; improve scandir() and get_files() logic
- Introduce WP_User::exists()
- Lose EOF ?>; clean up EOF newline
- Make get_post_custom() a wrapper of get_post_meta() so that it works when cache addition is suspended and to simplify it
- Merge Press This inline styles into wp-admin.css
- Move Options, Settings, and Transient functions from
wp-includes/functions.php
towp-includes/option.php
- New ‘wp_die_app_handler’ context in wp_die() for APP requests; introduces _scalar_wp_die_handler() as a generic handler that wraps die(), for use by plugins; move deprecated function to the end of the wp-app.php file (same as xmlrpc.php)
- Provide a DB fallback for keys in wp_salt(); fall back when any secret is used more than once; change how we detect a localized ‘put your unique phrase here’–eliminate $wp_default_secret_key and introduce $wp_secret_key_default to be added during the localized build process, not by translators
- Redirect bare category URLs for permalink structures starting with %category%
- Reduce references to the $wp_rewrite global because it’s no longer used or a wrapper function can be used instead
- Refactor WPDB::get_caller() into wp_debug_backtrace_summary() and improve the functionality to provide enhanced context and a standardised default pretty format
- Remove show_last_update, include_last_update_time, and show_date code parameters from wp_list_categories(), wp_dropdown_categories()
- Replace background image with CSS3 gradient in wp_die()
- Repurpose wp_die() for ajax responses
- Rewrite search_theme_directories() — better performance and allow for caching
- Set post password cookies via an action in wp-login.php; retire wp-pass.php (one less root file); obey login ssl preferences for post password form submission
- Split the main WP_Query posts query into two queries to avoid temp tables; leverage cache to avoid second query in persistent cache environments
- TinyMCE: move the WordPress plugins styles to the theme’s stylesheet
- Update add_permastruct() to allow more control over WP_Rewrite::generate_rewrite_rules()
- Update switch_theme() to use wp_get_theme()
- Update hierarchy for all hierarchical post types when deleting a parent post, not just for pages
- Update hoverIntent to r6
- Update jQuery imgAreaSelect plugin to 0.9.8
- Update jQuery UI to 1.8.20
- Update PHPDocs for wp_salt(), register_taxonomy_for_object_type(), wp_set_comment_status(), WP_Rewrite, rewrite endpoints, WP_Locale, wp_mime_type_icon(), mysql2date, get_taxonomy_labels(), WP_User::, register_post_status(), register_post_type()
- Update PHPMailer to 5.2.1
- Update Plupload to 1.5.4
- Update SimplePie to 1.2.1
- Update swfobject
- Update TinyMCE to 3.4.9
- Use get_taxonomies() instead of get_object_taxonomies() in the tag cloud widget
- Use microtime() for cron locks
- Use version_compare() when checking installed themes in the theme installer
- When WordPress is in a subdirectory (home URL != site URL), let home/wp-admin and home/wp-login.php redirect to their proper locations
- WordPress auto-detect RTL for the following locales: ar, ckb, fa_IR, he_IL, ug_CN, dv, fa_AF, ha, ps, uz_UZ, yi
- WP_HTTP improvements
- XML-RPC: Add support for Feature Images to the new wp.xxxPost apis
- XML-RPC: Expose image_default_link_type, image_default_size, and image_default_align options
- XML-RPC: Expose the post modified date (in blog TZ and GMT)
- XML-RPC: Initial implementation of Taxonomy and Term APIs; implements wp.newTerm, wp.editTerm, wp.deleteTerm, wp.getTerm, wp.getTerms, wp.getTaxonomy and wp.getTaxonomies
- XML-RPC: Introduce a date generation helper method to improve the dates returned over XMLRPC when we have a 0 date stored for drafts; improves the ability of clients to work with the new wp Post APIs
- XML-RPC: Introduce new create,read,update and delete XMLRPC APIs for Posts, Pages and all Custom Post Types; introduces: wp.newPost, wp.editPost, wp.deletePost, wp.getPost, and wp.getPosts