Commit 85d695ad5f for wordpress.org
commit 85d695ad5f5b59bd6c9956d6c1d0a7676806b9b4
Author: John Blackbourn <johnbillion@git.wordpress.org>
Date: Fri Jan 9 11:47:48 2026 +0000
General: Increase the minimum supported version of PHP to 7.4.
Props justlevine, masteradhoc, samiamnot, matt, bradshawtm, 4thhubbard, desrosj, jorbin, westonruter, peterwilsoncc, johnbillion
Fixes #62622
Built from https://develop.svn.wordpress.org/trunk@61459
git-svn-id: http://core.svn.wordpress.org/trunk@60771 1a063a9b-81f0-0310-95a4-ce76da25c4cd
diff --git a/readme.html b/readme.html
index 8696b0505a..c8dd83cdbd 100644
--- a/readme.html
+++ b/readme.html
@@ -52,7 +52,7 @@
<h2>System Requirements</h2>
<ul>
- <li><a href="https://www.php.net/">PHP</a> version <strong>7.2.24</strong> or greater.</li>
+ <li><a href="https://www.php.net/">PHP</a> version <strong>7.4</strong> or greater.</li>
<li><a href="https://www.mysql.com/">MySQL</a> version <strong>5.5.5</strong> or greater.</li>
</ul>
diff --git a/wp-admin/includes/class-wp-site-health.php b/wp-admin/includes/class-wp-site-health.php
index 493928677b..dd537296a8 100644
--- a/wp-admin/includes/class-wp-site-health.php
+++ b/wp-admin/includes/class-wp-site-health.php
@@ -965,6 +965,7 @@ class WP_Site_Health {
'function' => 'mysqli_connect',
'required' => false,
),
+ // Sodium was introduced in PHP 7.2, but the extension may not be enabled.
'libsodium' => array(
'constant' => 'SODIUM_LIBRARY_VERSION',
'required' => false,
diff --git a/wp-admin/includes/misc.php b/wp-admin/includes/misc.php
index df95166788..6c00a0ffb1 100644
--- a/wp-admin/includes/misc.php
+++ b/wp-admin/includes/misc.php
@@ -1621,8 +1621,8 @@ function wp_check_php_version() {
$response['is_lower_than_future_minimum'] = false;
- // The minimum supported PHP version will be updated to 7.4 in the future. Check if the current version is lower.
- if ( version_compare( $version, '7.4', '<' ) ) {
+ // The minimum supported PHP version will be updated to at least 8.0 in the future. Check if the current version is lower.
+ if ( version_compare( $version, '8.0', '<' ) ) {
$response['is_lower_than_future_minimum'] = true;
// Force showing of warnings.
diff --git a/wp-includes/compat.php b/wp-includes/compat.php
index af733c830d..3ac1372fdc 100644
--- a/wp-includes/compat.php
+++ b/wp-includes/compat.php
@@ -296,80 +296,11 @@ if ( ! function_exists( 'utf8_decode' ) ) :
endif;
endif;
-// sodium_crypto_box() was introduced in PHP 7.2.
+// sodium_crypto_box() was introduced with Sodium in PHP 7.2, but the extension may not be enabled.
if ( ! function_exists( 'sodium_crypto_box' ) ) {
require ABSPATH . WPINC . '/sodium_compat/autoload.php';
}
-if ( ! function_exists( 'is_countable' ) ) {
- /**
- * Polyfill for is_countable() function added in PHP 7.3.
- *
- * Verify that the content of a variable is an array or an object
- * implementing the Countable interface.
- *
- * @since 4.9.6
- *
- * @param mixed $value The value to check.
- * @return bool True if `$value` is countable, false otherwise.
- */
- function is_countable( $value ) {
- return ( is_array( $value )
- || $value instanceof Countable
- || $value instanceof SimpleXMLElement
- || $value instanceof ResourceBundle
- );
- }
-}
-
-if ( ! function_exists( 'array_key_first' ) ) {
- /**
- * Polyfill for array_key_first() function added in PHP 7.3.
- *
- * Get the first key of the given array without affecting
- * the internal array pointer.
- *
- * @since 5.9.0
- *
- * @param array $array An array.
- * @return string|int|null The first key of array if the array
- * is not empty; `null` otherwise.
- */
- function array_key_first( array $array ) { // phpcs:ignore Universal.NamingConventions.NoReservedKeywordParameterNames.arrayFound
- if ( empty( $array ) ) {
- return null;
- }
-
- foreach ( $array as $key => $value ) {
- return $key;
- }
- }
-}
-
-if ( ! function_exists( 'array_key_last' ) ) {
- /**
- * Polyfill for `array_key_last()` function added in PHP 7.3.
- *
- * Get the last key of the given array without affecting the
- * internal array pointer.
- *
- * @since 5.9.0
- *
- * @param array $array An array.
- * @return string|int|null The last key of array if the array
- *. is not empty; `null` otherwise.
- */
- function array_key_last( array $array ) { // phpcs:ignore Universal.NamingConventions.NoReservedKeywordParameterNames.arrayFound
- if ( empty( $array ) ) {
- return null;
- }
-
- end( $array );
-
- return key( $array );
- }
-}
-
if ( ! function_exists( 'array_is_list' ) ) {
/**
* Polyfill for `array_is_list()` function added in PHP 8.1.
diff --git a/wp-includes/css/dist/index.php b/wp-includes/css/dist/index.php
index abb9de2cf2..7e238db692 100644
--- a/wp-includes/css/dist/index.php
+++ b/wp-includes/css/dist/index.php
@@ -12,20 +12,15 @@ return array(
'path' => 'preferences/style',
'dependencies' => array('wp-components'),
),
- array(
- 'handle' => 'wp-list-reusable-blocks',
- 'path' => 'list-reusable-blocks/style',
- 'dependencies' => array('wp-components'),
- ),
array(
'handle' => 'wp-nux',
'path' => 'nux/style',
'dependencies' => array('wp-components'),
),
array(
- 'handle' => 'wp-patterns',
- 'path' => 'patterns/style',
- 'dependencies' => array('wp-block-editor', 'wp-components'),
+ 'handle' => 'wp-list-reusable-blocks',
+ 'path' => 'list-reusable-blocks/style',
+ 'dependencies' => array('wp-components'),
),
array(
'handle' => 'wp-reusable-blocks',
@@ -33,8 +28,8 @@ return array(
'dependencies' => array('wp-block-editor', 'wp-components'),
),
array(
- 'handle' => 'wp-widgets',
- 'path' => 'widgets/style',
+ 'handle' => 'wp-patterns',
+ 'path' => 'patterns/style',
'dependencies' => array('wp-block-editor', 'wp-components'),
),
array(
@@ -47,6 +42,11 @@ return array(
'path' => 'components/style',
'dependencies' => array(),
),
+ array(
+ 'handle' => 'wp-widgets',
+ 'path' => 'widgets/style',
+ 'dependencies' => array('wp-block-editor', 'wp-components'),
+ ),
array(
'handle' => 'wp-format-library',
'path' => 'format-library/style',
@@ -62,39 +62,39 @@ return array(
'path' => 'customize-widgets/style',
'dependencies' => array('wp-block-editor', 'wp-block-library', 'wp-components', 'wp-media-utils', 'wp-preferences', 'wp-widgets'),
),
- array(
- 'handle' => 'wp-edit-post',
- 'path' => 'edit-post/style',
- 'dependencies' => array('wp-block-editor', 'wp-block-library', 'wp-commands', 'wp-components', 'wp-editor', 'wp-preferences', 'wp-widgets'),
- ),
array(
'handle' => 'wp-media-utils',
'path' => 'media-utils/style',
'dependencies' => array('wp-components'),
),
array(
- 'handle' => 'wp-block-library',
- 'path' => 'block-library/style',
- 'dependencies' => array('wp-block-editor', 'wp-components', 'wp-patterns'),
+ 'handle' => 'wp-edit-post',
+ 'path' => 'edit-post/style',
+ 'dependencies' => array('wp-block-editor', 'wp-block-library', 'wp-commands', 'wp-components', 'wp-editor', 'wp-preferences', 'wp-widgets'),
),
array(
'handle' => 'wp-edit-widgets',
'path' => 'edit-widgets/style',
'dependencies' => array('wp-block-editor', 'wp-block-library', 'wp-components', 'wp-media-utils', 'wp-patterns', 'wp-preferences', 'wp-widgets'),
),
+ array(
+ 'handle' => 'wp-block-library',
+ 'path' => 'block-library/style',
+ 'dependencies' => array('wp-block-editor', 'wp-components', 'wp-patterns'),
+ ),
array(
'handle' => 'wp-editor',
'path' => 'editor/style',
'dependencies' => array('wp-block-editor', 'wp-commands', 'wp-components', 'wp-media-utils', 'wp-patterns', 'wp-preferences'),
),
- array(
- 'handle' => 'wp-edit-site',
- 'path' => 'edit-site/style',
- 'dependencies' => array('wp-block-editor', 'wp-block-library', 'wp-commands', 'wp-components', 'wp-editor', 'wp-patterns', 'wp-preferences', 'wp-widgets'),
- ),
array(
'handle' => 'wp-block-editor',
'path' => 'block-editor/style',
'dependencies' => array('wp-commands', 'wp-components', 'wp-preferences'),
),
+ array(
+ 'handle' => 'wp-edit-site',
+ 'path' => 'edit-site/style',
+ 'dependencies' => array('wp-block-editor', 'wp-block-library', 'wp-commands', 'wp-components', 'wp-editor', 'wp-patterns', 'wp-preferences', 'wp-widgets'),
+ ),
);
diff --git a/wp-includes/js/dist/script-modules/index.php b/wp-includes/js/dist/script-modules/index.php
index e7e9ca3b69..89dd1fa569 100644
--- a/wp-includes/js/dist/script-modules/index.php
+++ b/wp-includes/js/dist/script-modules/index.php
@@ -13,9 +13,14 @@ return array(
'asset' => 'core-abilities/index.min.asset.php',
),
array(
- 'id' => '@wordpress/a11y',
- 'path' => 'a11y/index',
- 'asset' => 'a11y/index.min.asset.php',
+ 'id' => '@wordpress/interactivity-router',
+ 'path' => 'interactivity-router/index',
+ 'asset' => 'interactivity-router/index.min.asset.php',
+ ),
+ array(
+ 'id' => '@wordpress/interactivity-router/full-page',
+ 'path' => 'interactivity-router/full-page',
+ 'asset' => 'interactivity-router/full-page.min.asset.php',
),
array(
'id' => '@wordpress/interactivity',
@@ -23,14 +28,14 @@ return array(
'asset' => 'interactivity/index.min.asset.php',
),
array(
- 'id' => '@wordpress/interactivity-router',
- 'path' => 'interactivity-router/index',
- 'asset' => 'interactivity-router/index.min.asset.php',
+ 'id' => '@wordpress/a11y',
+ 'path' => 'a11y/index',
+ 'asset' => 'a11y/index.min.asset.php',
),
array(
- 'id' => '@wordpress/interactivity-router/full-page',
- 'path' => 'interactivity-router/full-page',
- 'asset' => 'interactivity-router/full-page.min.asset.php',
+ 'id' => '@wordpress/abilities',
+ 'path' => 'abilities/index',
+ 'asset' => 'abilities/index.min.asset.php',
),
array(
'id' => '@wordpress/latex-to-mathml',
@@ -42,11 +47,6 @@ return array(
'path' => 'latex-to-mathml/loader',
'asset' => 'latex-to-mathml/loader.min.asset.php',
),
- array(
- 'id' => '@wordpress/abilities',
- 'path' => 'abilities/index',
- 'asset' => 'abilities/index.min.asset.php',
- ),
array(
'id' => '@wordpress/route',
'path' => 'route/index',
diff --git a/wp-includes/pluggable.php b/wp-includes/pluggable.php
index 4241a8f184..8cf983ead7 100644
--- a/wp-includes/pluggable.php
+++ b/wp-includes/pluggable.php
@@ -2777,11 +2777,10 @@ if ( ! function_exists( 'wp_hash_password' ) ) :
* - `PASSWORD_ARGON2ID`
* - `PASSWORD_DEFAULT`
*
- * The values of the algorithm constants are strings in PHP 7.4+ and integers in PHP 7.3 and earlier.
- *
* @since 6.8.0
+ * @since 7.0.0 The `$algorithm` parameter is now always a string.
*
- * @param string|int $algorithm The hashing algorithm. Default is the value of the `PASSWORD_BCRYPT` constant.
+ * @param string $algorithm The hashing algorithm. Default is the value of the `PASSWORD_BCRYPT` constant.
*/
$algorithm = apply_filters( 'wp_hash_password_algorithm', PASSWORD_BCRYPT );
@@ -2791,14 +2790,13 @@ if ( ! function_exists( 'wp_hash_password' ) ) :
* The default hashing algorithm is bcrypt, but this can be changed via the {@see 'wp_hash_password_algorithm'}
* filter. You must ensure that the options are appropriate for the algorithm in use.
*
- * The values of the algorithm constants are strings in PHP 7.4+ and integers in PHP 7.3 and earlier.
- *
* @since 6.8.0
+ * @since 7.0.0 The `$algorithm` parameter is now always a string.
*
- * @param array $options Array of options to pass to the password hashing functions.
- * By default this is an empty array which means the default
- * options will be used.
- * @param string|int $algorithm The hashing algorithm in use.
+ * @param array $options Array of options to pass to the password hashing functions.
+ * By default this is an empty array which means the default
+ * options will be used.
+ * @param string $algorithm The hashing algorithm in use.
*/
$options = apply_filters( 'wp_hash_password_options', array(), $algorithm );
diff --git a/wp-includes/version.php b/wp-includes/version.php
index a08ed2659c..b1943f62e8 100644
--- a/wp-includes/version.php
+++ b/wp-includes/version.php
@@ -16,7 +16,7 @@
*
* @global string $wp_version
*/
-$wp_version = '7.0-alpha-61458';
+$wp_version = '7.0-alpha-61459';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
@@ -37,7 +37,7 @@ $tinymce_version = '49110-20250317';
*
* @global string $required_php_version
*/
-$required_php_version = '7.2.24';
+$required_php_version = '7.4';
/**
* Holds the names of required PHP extensions.