WordPress.org

Codex

Interested in functions, hooks, classes, or methods? Check out the new WordPress Code Reference!

Version 4.9.6

On 17 May 2018, WordPress 4.9.6 was released to the public.

See also: other WordPress Versions.

Installation/Update Information

To download WordPress 4.9.6, update automatically from the Dashboard > Updates menu in your site's admin area or visit https://wordpress.org/download/release-archive/.

For step-by-step instructions on installing and updating WordPress:

If you are new to WordPress, we recommend that you begin with the following:

Summary

From the WordPress 4.9.6 release post: This privacy and maintenance release includes 37 enhancements, 51 bug fixes, and 2 tasks. See the full list of closed tickets in Trac. The European Union’s General Data Protection Regulation (GDPR) related changes include Comments, Privacy Policy Page, and Data Handling. In addition to the GDPR changes, the following are additional highlights:

  • “Mine” has been added as a filter in the media library.
  • When viewing a plugin in the admin, it will now tell you the minimum PHP version required.
  • We’ve added new PHP polyfills for forwards-compatibility and proper variable validation.
  • TinyMCE was updated to the latest version (4.7.11).

Detailed Changes

Administration

  • #43820 - Add "Mine" filter for attachments similarly to posts and comments

Bundled Theme

  • #43915 - Bundled Themes: Bump version number and update changelog in all themes for 4.9.6 release

Customize

  • #43945 - Missing closing button tag in 'Live Preview' button

General

  • #43583 - Introduce new PHP cross-version compat function `is_countable()`
  • #43619 - Introduce new PHP cross-version compat function `is_iterable()`

Login and Registration

  • #43843 - Set nocache_headers in wp-signup.php
  • #43917 - Set nocache_headers in wp-activate.php

Media

  • #42919 - Unable to upload files with the AAC extension

Plugins

  • #43650 - Add Requires PHP Version to Plugin - View Details

Posts, Post Types

  • #43739 - Include 'viewable' attribute on Post Type resource for 'edit' context

Privacy

  • #43873 - Relocate 'Privacy / Export / Erasure' pages into more appropriate menus
  • #43931 - Use associative array instead of numeric for exporters and erasers
  • #43954 - Showing the privacy policy admin notice on all screens is intrusive
  • #44055 - Don't show notice to the privacy policy guide when user cannot view the guide
  • #44057 - It's not obvious what to do if menu bubble for policy update appears
  • #44091 - Rename exports folder to avoid deleting other files
  • #43435 - Add settings screen for creating a privacy policy
  • #43436 - Add opt-in for commenter cookies
  • #43440 - Add personal data from comments to personal data export
  • #43442 - Add tools for anonymizing of commenters
  • #43443 - Add a method for confirmation of requests for deleting or anonymizing of personal data
  • #43473 - Add default text for a privacy policy
  • #43481 - Add tabs and placeholders to privacy tools page in wp-admin
  • #43491 - Automatically create a Privacy Policy page when installing WordPress
  • #43545 - Helper functions: Anonymizing data in a standardized way
  • #43547 - Add personal data from usermeta/userdata to personal data export
  • #43551 - Add a means to package personal data into a file
  • #43620 - Privacy Policy page design
  • #43637 - Add filters and ajax support for personal data erasure
  • #43715 - Add Privacy Policy link to bundled theme footers
  • #43721 - Adding links to imprint and privacy policy pages on WP login screens
  • #43846 - Fix Count Styling on Personal Data Request Tables Post Status Links
  • #43850 - Add privacy policy URL template tags
  • #43852 - Fix spacing on responsive for Use This Page button in Privacy Tools
  • #43883 - Add a user's attachments to the personal data export file
  • #43894 - Rename page / menu 'Privacy Tools' to 'Privacy Policy Page'
  • #43905 - Personal data export link does not work
  • #43908 - Export keeps generating new .zip files on Windows installations
  • #43909 - Improve styling on personal data tables
  • #43911 - Add mailto into Export/Erasure tables
  • #43913 - On sending the personal data export email, the request should be marked COMPLETED
  • #43919 - Disable personal data export and personal data erasure for multisite (for now)
  • #43920 - Use the terms erase / erasure instead of remove / removal for personal data
  • #43922 - Data removal/erasure requests don't get marked as "Completed" after erasure happens
  • #43925 - Inconsistencies in GDPR strings
  • #43926 - Improve flow for privacy.php
  • #43929 - Privacy pages: buttons should be buttons and other coding standards
  • #43934 - Missing doc for the user_request_key_expiration filter
  • #43935 - Limit Privacy Policy screen to Super Admins in Multisite
  • #43939 - Fix spelling mistake - gdpr
  • #43940 - Privacy Policy Settings: Don't show page selector if you don't have any pages
  • #43942 - Add pointers informing users of the new privacy pages
  • #43951 - Typos in `WP_Privacy_Policy_Content::get_default_content()`
  • #43953 - Seeing the `privacy policy text has changed` notice on fresh installs is confusing
  • #43961 - Privacy Policy popup covers collapsed admin menu
  • #43964 - "Email Data" button text - Make it more clear that an export link is sent, not the whole data?
  • #43965 - GDPR Privacy Notes Don't Play Nice with Gutenberg
  • #43966 - Prioritize the User group in Personal Data Exports to right below the About group
  • #43968 - Add Request Type into Confirmation Email Subject for GDPR
  • #43970 - Add request type to the confirmation confirmation page - GDPR
  • #43973 - Email user once removal request completed - GDPR
  • #43980 - Consider outputting the suggested privacy policy content to a new page insted of a postbox
  • #44015 - Add `id` attribute to each row of privacy post list tables
  • #44016 - user_request_action_email_content filter hook documentation inaccurate
  • #44026 - Export and Erase Personal Data tables misaligned under 782px
  • #44031 - Add personal data export request ID to the wp_privacy_personal_data_export_file_created hook
  • #44040 - Potential PHP notice in `wp_ajax_wp_privacy_erase_personal_data()`
  • #44045 - GDPR WP Pointer dismiss link can be unreachable
  • #44046 - GDPR Privacy Policy Link in wp-login.php page can overflow other links
  • #44048 - Privacy: exclude the wrapper from the default policy content
  • #44050 - Privacy: Abandoned heading in `WP_Privacy_Policy_Content::get_default_content()`
  • #44054 - Privacy: Escape the comment link output in the wp_comments_personal_data_exporter() function.
  • #44056 - Fix markup for table of contents on privacy policy guide
  • #44062 - Don't show privacy feature pointer to new users
  • #44063 - Privacy policy guide: do not remove the "Suggested text has changed" bubble on saving the policy page
  • #44064 - Define $title and $parent_file in privacy.php
  • #44065 - Remove is-dismissible class from notice when privacy info has changed
  • #44075 - GDPR inline documentation improvements
  • #44076 - Add `wp_page_for_privacy_policy` to `populate_options()`
  • #44079 - Require `manage_privacy_options` capability to edit the privacy policy page
  • #44092 - Export/Erase tools: CSS issues with `next_steps` buttons with some locales
  • #44093 - Proposed Adjustment to Privacy Settings buttons

Query

  • #43375 - Incorrect 'old_slug_redirect_post_id' filter docs

Themes

  • #43374 - PHP 7.2 Warning: count(): Parameter must be an array or an object that implements Countable in /wp-includes/theme.php on line 356
  • #43872 - Add page template filter for all post types

TinyMCE

  • #43862 - TinyMCE: Update to 4.7.11
  • #43969 - Custom themes will not work in TinyMCE 4.7
  • #43984 - Customize: JavaScript error when opening Text widget

Upgrade/Install

  • #43952 - Database error inserting cron job on fresh install

Users

  • #42202 - REST API: no equivalent for `who=authors` to display potential authors

List of Files Revised

wp-admin/css/common-rtl.css
wp-admin/css/common-rtl.min.css
wp-admin/css/common.css
wp-admin/css/common.min.css
wp-admin/css/edit-rtl.css
wp-admin/css/edit-rtl.min.css
wp-admin/css/edit.css
wp-admin/css/edit.min.css
wp-admin/css/forms-rtl.css
wp-admin/css/forms-rtl.min.css
wp-admin/css/forms.css
wp-admin/css/forms.min.css
wp-admin/css/login-rtl.css
wp-admin/css/login-rtl.min.css
wp-admin/css/login.css
wp-admin/css/login.min.css
wp-admin/includes/admin-filters.php
wp-admin/includes/ajax-actions.php
wp-admin/includes/class-wp-community-events.php
wp-admin/includes/class-wp-internal-pointers.php
wp-admin/includes/class-wp-media-list-table.php
wp-admin/includes/file.php
wp-admin/includes/misc.php
wp-admin/includes/plugin-install.php
wp-admin/includes/plugin.php
wp-admin/includes/post.php
wp-admin/includes/schema.php
wp-admin/includes/upgrade.php
wp-admin/includes/user.php
wp-admin/js/customize-controls.js
wp-admin/js/customize-controls.min.js
wp-admin/js/post.js
wp-admin/js/xfn.js
wp-admin/js/xfn.min.js
wp-admin/about.php
wp-admin/admin-ajax.php
wp-admin/credits.php
wp-admin/freedoms.php
wp-admin/menu.php
wp-admin/privacy.php
wp-admin/tools.php
wp-content/themes/twentyeleven/languages/twentyeleven.pot
wp-content/themes/twentyeleven/footer.php
wp-content/themes/twentyeleven/readme.txt
wp-content/themes/twentyeleven/rtl.css
wp-content/themes/twentyeleven/style.css
wp-content/themes/twentyfifteen/footer.php
wp-content/themes/twentyfifteen/readme.txt
wp-content/themes/twentyfifteen/rtl.css
themes/twentyfifteen/style.css
wp-content/themes/twentyfourteen/footer.php
wp-content/themes/twentyfourteen/readme.txt
wp-content/themes/twentyfourteen/rtl.css
wp-content/themes/twentyfourteen/style.css
wp-content/themes/twentyseventeen/template-parts/footer/site-info.php
wp-content/themes/twentyseventeen/README.txt
wp-content/themes/twentyseventeen/rtl.css
wp-content/themes/twentyseventeen/style.css
wp-content/themes/twentysixteen/footer.php
wp-content/themes/twentysixteen/readme.txt
wp-content/themes/twentysixteen/rtl.css
wp-content/themes/twentysixteen/style.css
wp-content/themes/twentyten/languages/twentyten.pot
wp-content/themes/twentyten/footer.php
wp-content/themes/twentyten/readme.txt
wp-content/themes/twentyten/rtl.css
wp-content/themes/twentyten/style.css
wp-content/themes/twentythirteen/footer.php
wp-content/themes/twentythirteen/readme.txt
wp-content/themes/twentythirteen/rtl.css
wp-content/themes/twentythirteen/style.css
wp-content/themes/twentytwelve/footer.php
wp-content/themes/twentytwelve/readme.txt
wp-content/themes/twentytwelve/rtl.css
wp-content/themes/twentytwelve/style.css
wp-includes/css/editor-rtl.css
wp-includes/css/editor-rtl.min.css
wp-includes/css/editor.css
wp-includes/css/editor.min.css
wp-includes/css/wp-pointer-rtl.css
wp-includes/css/wp-pointer-rtl.min.css
wp-includes/css/wp-pointer.css
wp-includes/css/wp-pointer.min.css
wp-includes/customize/class-wp-customize-theme-control.php
wp-includes/js/tinymce/plugins/charmap/plugin.js
wp-includes/js/tinymce/plugins/charmap/plugin.min.js
wp-includes/js/tinymce/plugins/colorpicker/plugin.js
wp-includes/js/tinymce/plugins/colorpicker/plugin.min.js
wp-includes/js/tinymce/plugins/compat3x/plugin.js
wp-includes/js/tinymce/plugins/compat3x/plugin.min.js
wp-includes/js/tinymce/plugins/directionality/plugin.js
wp-includes/js/tinymce/plugins/directionality/plugin.min.js
wp-includes/js/tinymce/plugins/fullscreen/plugin.js
wp-includes/js/tinymce/plugins/fullscreen/plugin.min.js
wp-includes/js/tinymce/plugins/hr/plugin.js
wp-includes/js/tinymce/plugins/hr/plugin.min.js
wp-includes/js/tinymce/plugins/image/plugin.js
wp-includes/js/tinymce/plugins/image/plugin.min.js
wp-includes/js/tinymce/plugins/link/plugin.js
wp-includes/js/tinymce/plugins/link/plugin.min.js
wp-includes/js/tinymce/plugins/lists/plugin.js
wp-includes/js/tinymce/plugins/lists/plugin.min.js
wp-includes/js/tinymce/plugins/media/plugin.js
wp-includes/js/tinymce/plugins/media/plugin.min.js
wp-includes/js/tinymce/plugins/paste/plugin.js
wp-includes/js/tinymce/plugins/paste/plugin.min.js
wp-includes/js/tinymce/plugins/tabfocus/plugin.js
wp-includes/js/tinymce/plugins/tabfocus/plugin.min.js
wp-includes/js/tinymce/plugins/textcolor/plugin.js
wp-includes/js/tinymce/plugins/textcolor/plugin.min.js
wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.eot
wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.svg
wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.ttf
wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.woff
wp-includes/js/tinymce/skins/lightgray/content.inline.min.css
wp-includes/js/tinymce/skins/lightgray/content.min.css
wp-includes/js/tinymce/skins/lightgray/skin.min.css
wp-includes/js/tinymce/skins/wordpress/wp-content.css
wp-includes/js/tinymce/themes/inlite/theme.js
wp-includes/js/tinymce/themes/inlite/theme.min.js
wp-includes/js/tinymce/themes/modern/theme.js
wp-includes/js/tinymce/themes/modern/theme.min.js
wp-includes/js/tinymce/utils/validate.js
wp-includes/js/tinymce/tinymce.min.js
wp-includes/js/tinymce/wp-tinymce.js.gz
wp-includes/js/media-models.js
wp-includes/js/media-models.min.js
wp-includes/js/media-views.js
wp-includes/js/media-views.min.js
wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php
wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php
wp-includes/capabilities.php
wp-includes/class-wp-editor.php
wp-includes/class-wp-theme.php
wp-includes/comment-template.php
wp-includes/comment.php
wp-includes/compat.php
wp-includes/default-filters.php
wp-includes/functions.php
wp-includes/link-template.php
wp-includes/media.php
wp-includes/post.php
wp-includes/query.php
wp-includes/script-loader.php
wp-includes/theme.php
wp-includes/user.php
wp-includes/version.php
wp-activate.php
wp-comments-post.php
wp-login.php
wp-signup.php