On September 4, 2014, WordPress Version 4.0 “Benny,” named for jazz musician Benny Goodman, was released to the public. For more information on this enhancement and bug-fix release, read the WordPress Blog, and see the Changelog for 4.0.
For Version 4.0, the database version (db_version in wp_options) changed to 29630, and the Trac revision was 29710.
- View Closed Tickets
Highlights
- Manage your media and embedded content with style
- Explore your uploads in a beautiful, endless grid
- A new details preview makes viewing and editing any amount of media in sequence a snap.
- The content-editing experience is better than ever
- The visual editor now expands to fit your content
- A fixed toolbar in the editor when you scroll
- Embeddable content previews right in the visual editor
- Better workflow for finding and installing plugins
- A new grid view adds some visual flair to finding and installing plugins, bringing relevant plugin info front and center
- For Developers
- Customizer Panels API
- Updated external libraries
- Better flexibility for WP_Query ORDER BY
What’s New
General
- Featured image previews now support .bmp files
- Featured Image meta box is now hidden for contributors lacking upload capabilities
- New supported oEmbed providers: CollegeHumor, Issuu, Mixcloud, YouTube playlists, TED talks
- Install WordPress in your language
- Streamlined Language management right from the dashboard
Posts
- Display embed previews for audio/visual URLs in Visual editor content box.
- Page scrolling now scrolls post content box.
- Edit Post/Page menu bar sticks to top of content box when scrolling (Visual and Text editor).
- Color picker was re-added to the Visual editor
Media
- Add Media Grid view option (default) for Media Library
- Add “Bulk Select” button to Media Grid view to delete multiple items
- Add oEmbed support for TED talks, Mixcloud, CollegeHumor.com, Issuu
- Expand oEmbed support to include YouTube playlist URLs and Polldaddy’s short URL format
- Remove Viddler oEmbed support
- Update SlideShare oEmbed regex
- Improved media experience on small screen sizes (embedded videos now responsive)
- Native video and audio shortcodes now support Flash playback looping
Comments
- Comments in trash can now be marked as spam.
Plugins
- Display plugins list as grid, with thumbnails, on Add New screen.
- Add popup window with plugin details (displays info from plugin’s directory page).
- Add “Beta Testing” tab to Plugins screen for new features-as-plugins.
Accessibility
- Improved keyboard accessibility in the Add Media panel
- Improved screen-reader support for Customizer sections
- Makes links in help tabs keyboard accessible
- Improvements for screen-readers when managing widgets in the Customizer
Install Process
- Add language select menu as first Installation screen (skipped for localized installs)
Multisite
- mp4 file extension was added to allowed upload file types
Under The Hood
General
- Performance and effectiveness improvements to wptexturize()
- Ensure custom post types nested under top-level menu items get the proper classes
- Added a src parameter to the embed shortcode
- Fixes for handling nested shortcodes
- Make default ‘template’ argument of the_taxonomies() and get_the_taxonomies() translatable
- Remove a redundant condition for comment feeds from WP_Query::get_posts()
- The Customizer now properly honors theme support defaults for background images
- Installed Themes search now shows a proper “no results” message
- Improved, more consistent styling for HTML5 input elements
- Post previews now redirect to the permalink if the post has been published
- Email and URL input types have been implemented where appropriate in the admin
- Most uses of extract() have been removed from the core code
- 3gp mime type support was added
- wp_handle_upload|sideload() logic was consolidated
- Remove dead and unused code from dashboard.php following changes in 3.8
- The operator argument now case-insensitive in tax queries
- Now possible to disable drag and drop functionality in wp_editor() instances
- Trigger _doing_it_wrong() when a registered post type or taxonomy slug is too long (20 characters max)
- Widgets management in the Customizer to leverage the new Panels API.
JavaScript
- Heartbeat API “experimental” labels have now been removed
- Improved inline documentation for Media Views
- Forces an autosave on switch from Visual to Text editor
Bug Fixes
- Fix a notice with media attached to non-existent post type
- Fix expanding and collapsing the admin menu on small screen sizes
- Fix a bug where multiple Add Media buttons shared an ID attribute
- Fix get_the_ID() not checking for a proper post object
- Fix current track highlighting in audio playlists
- Fixed bug with audio player not properly floating around images in the editor
- Fix a bug where bulk actions would be performed upon clicking the Filter button in some circumstances
- Fix remove_all_filters() always returning true via has_filter() in some scenarios
- Fix a notice in wp_reschedule_event
- Fix paragraph tags not being converted in PressThis for the Text editor
- Fix get_the_excerpt() not always checking $post->post_excerpt
- Introduce caching for oEmbed responses
- Fix an issue where attachment display settings didn’t work for galleries
- Leverage iframe sandboxing for audio and video, allowing arbitrary scripts to be loaded
- Ensure all plugins have an accurate oEmbed provider list by loading them “just in time”
- Fixed several problems with formatting of curly quotes, square braces, non-breaking spaces, and related performance issues.
Multisite
- Fix a bug where an incorrect schema was shown on the Edit Site screen
Classes
What’s New
- Introduce WP_Customize_Panel
- Introduce WP_Session_Tokens
- Introduce WP_User_Meta_Session_Tokens
- Introduce WP_Query::parse_orderby()
- Introduce WP_Query::parse_order()
- Introduce wpdb::esc_like()
- Introduce WP_oEmbed::get_provider()
- Introduce WP_oEmbed::_add_provider_early()
- Introduce WP_oEmbed::_remove_provider_early()
- Introduce WP_Customize_Control::active()
- Introduce WP_Customize_Control::active_callback()
- Introduce WP_Customize_Control::input_attrs()
- Introduce WP_Customize_Control::active_callback()
- Introduce WP_Widget_Area_Customize_Control::active_callback()
- Introduce WP_Customize_Manager::containers()
- Introduce WP_Customize_Manager::panels()
- Introduce WP_Customize_Manager::customize_preview_override_404_status()
- Introduce WP_Customize_Manager::add_panel()
- Introduce WP_Customize_Manager::get_panel()
- Introduce WP_Customize_Manager::remove_panel()
- Introduce WP_Customize_Widgets::is_widget_rendered()
- Introduce WP_Customize_Widgets::is_sidebar_rendered()
- Introduce WP_Image_Editor::get_quality()
- Introduce WP_Dependencies::recurse_deps()
- Introduce WP_Plugin_Install_List_Table::get_installed_plugin_slugs()
- Introduce magic methods for:
- Custom_Image_Header
- Custom_Background** Walker
- WP_Ajax_Response
- WP_Comment_Query
- WP_Error
- WP_Filesystem_Base
- WP_List_Table
- WP_MatchesMapRegex
- WP_Object_Cache
- WP_oEmbed
- WP_Query
- WP_Text_Diff_Renderer_Table
- WP_Roles
- WP_User_Query
Functions
What’s New
- WP_Query – Better flexibility in multiple `orderby` fields
- wp_list_pluck() – $index_key parameter added.
- Introduce attachment_url_to_postid()
- Introduce get_comments_number_text()
- Introduce get_editor_stylesheets()
- Introduce is_customize_preview()
- Introduce translations_api()
- Introduce upgrade_400()
- Introduce wp_ajax_set_attachment_thumbnail()
- Introduce wp_ajax_parse_embed()
- Introduce wp_can_install_language_pack()
- Introduce wp_destroy_all_sessions()
- Introduce wp_destroy_current_session()
- Introduce wp_destroy_other_sessions()
- Introduce wp_download_language_pack()
- Introduce wp_dropdown_languages()
- Introduce wp_embed_handler_youtube()
- Introduce wp_get_all_sessions()
- Introduce wp_get_available_translations()
- Introduce wp_get_session_token
- Introduce wp_install_language_form()
- Introduce wpview_media_sandbox_styles()
- Introduce wp_spaces_regexp()
- Introduce wp_validate_boolean()
Deprecated
- get_all_category_ids() – use get_terms() instead.
- like_escape() – use $wpdb->esc_like() instead.
- url_is_accessable_via_ssl()
Actions & Filters
- The ISO date standard YYYY-MM-DD format was added to the date_formats filter.
- The $post parameter was added to preview_post_link.
- wp_handle_upload_prefilter was renamed to {$action}_prefilter.
New Actions
- Introduce customize_render_panel
- Introduce customize_render_panel_{$this->id}
- Introduce delete_user_form
- Introduce pre_get_users
- Introduce rss_tag_pre
Top ↑
New Filters New Filters
- Introduce async_update_translation
- Introduce attach_session_information
- Introduce customize_control_active
- Introduce human_time_diff
- Introduce oembed_remote_get_args
- Introduce oembed_ttl
- Introduce run_wptexturize
- Introduce session_token_manager
- Introduce term_search_min_chars
- Introduce translations_api
- Introduce translations_api_result
- Introduce wp_editor_expand
- Introduce wp_editor_settings
- Introduce wp_embed_handler_youtube
- Introduce wp_list_comments_args
- Introduce wp_spaces_regexp
- Introduce wp_title_parts
- Introduce wxr_export_skip_commentmeta
Constants
Deprecated
- FORCE_SSL_LOGIN – use FORCE_SSL_ADMIN instead.
- WPLANG (see https://core.trac.wordpress.org/changeset/29630)
External Libraries
- Update to TinyMCE 4.1.3
- Update to jQuery 1.11.1
- Update to MediaElement 2.15