The PHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 5.6.20 or higher native JSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. extension has been bundled and compiled with PHP by default since 5.2.0 (2006). However, a significant number of PHP installs did not include it. In order to ensure a consistent experience for JSON related functionality in all supported versions of PHP, WordPress Core Core is the set of software required to run WordPress. The Core Development Team builds WordPress. has historically included a large number of workarounds, functions, and polyfills.
In 2011 (WordPress 3.2), an attempt was made to remove JSON related compatibility code. However, it was discovered that a fair number of distributions were still missing the PHP JSON extension by default, and the removed code was restored to ensure compatibility.
In WordPress 5.2, the minimum version of PHP supported was raised from 5.2.6 to 5.6.20. In the 8 year period since the last attempt was made to encourage use of the PHP native JSON extension, the number of distributions with this extension disabled has significantly decreased.
Because of this, the PHP native JSON extension is now required to run WordPress 5.3 and higher.
To prevent compatibility issues, a site that does not have the PHP native JSON extension enabled will see an error message when attempting to upgrade to WordPress 5.3. The update will be cancelled and the site will remain on the current version (see [46455]). This is to prevent potential compatibility issues on servers running custom PHP configurations.
Here’s a summary of what has changed.
Deprecated
The following functions and classes will remain in the code base, but will trigger a deprecated warning when used (see [46205]):
- The
Services_JSON
and Services_JSON_Error
classes and all methods - The
wp-includes/class-json.php
file - The (private)
_wp_json_prepare_data()
function
Removed
The following functions, and classes have been removed entirely from the code base (see the [46208] changeset):
json_encode()
function polyfilljson_decode()
function polyfill_json_decode_object_helper()
function polyfilljson_last_error_msg()
polyfillJsonSerializable
interface polyfill$wp_json
global variableJSON_PRETTY_PRINT
constant polyfillJSON_ERROR_NONE
constant polyfill
Unchanged
The wp_json_encode()
function will remain with no intention to deprecate it at this time. This function includes an extra sanity check for JSON encoding data and should still be used as the preferred way to encode data into JSON.
For more information about these changes, check out #47699 on Trac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. and the relevant changesets ([46205], [46206], [46208], [46377], and [46455]).
Props @jrf & @jorbin for peer review.
#5-3, #dev-notes, #php