[wp-trac] [WordPress Trac] #55656: PHP 8.x: various compatibility fixes for WordPress 6.1

WordPress Trac noreply at wordpress.org
Tue Sep 27 02:16:42 UTC 2022


#55656: PHP 8.x: various compatibility fixes for WordPress 6.1
-------------------------------------------------+-------------------------
 Reporter:  hellofromTonya                       |       Owner:
                                                 |  SergeyBiryukov
     Type:  task (blessed)                       |      Status:  accepted
 Priority:  normal                               |   Milestone:  6.1
Component:  General                              |     Version:
 Severity:  normal                               |  Resolution:
 Keywords:  php8 php81 has-patch has-unit-tests  |     Focuses:  coding-
                                                 |  standards
-------------------------------------------------+-------------------------

Comment (by SergeyBiryukov):

 In [changeset:"54321" 54321]:
 {{{
 #!CommitTicketReference repository="" revision="54321"
 Code Modernization: Fix null to non-nullable deprecations in
 `wp_xmlrpc_server::_insert_post()`.

 The `wp_xmlrpc_server::_insert_post()` method creates a new post via
 `wp_insert_post()` or updates an existing one via `wp_update_post()`,
 which subsequently calls `wp_insert_post()`. However, the default/fallback
 values used in the function were not in line with the default/fallback
 values used in the `wp_insert_post()` function.

 The `wp_insert_post()` function does a `wp_parse_args()` (array merge) of
 the received arguments with the defaults. If any of the received arguments
 are `null`, this would overwrite the default value, as seen in
 [https://3v4l.org/bfVlv array_merge() example], and lead to "passing null
 to non-nullable" deprecation notices on PHP 8.1 for certain arguments.

 Unfortunately, the conditional logic within the
 `wp_xmlrpc_server::_insert_post()` function itself often uses an `isset()`
 to trigger certain code blocks, so syncing the defaults with those used in
 the `wp_insert_post()` function was not an option.

 This commit:
 * Updates the default/fallback values in the `$defaults` array only for
 those values where this would not lead to a change in the behavior of the
 function.
 * Adds a safeguard function, filtering out all remaining `null` values
 from the `$post_data` array before it is passed on to the
 `wp_insert_post()` or `wp_update_post()` functions. Removing those values
 is safe as this means that these array keys will now:
  * either be set to the default/fallback value as defined in
 `wp_insert_post()`.
  * or not be set and for those values which don't have a default/fallback
 value in `wp_insert_post()`, the function does an `! empty()` or `isset()`
 check anyway and those array keys not being defined means that the result
 of those checks will remain the same.

 Includes
 * Removing a couple of conditions which are now redundant.
 * Removing an `expectDeprecation()` in the `Tests_Date_XMLRPC` test class,
 which is now no longer needed.

 Fixes various errors along the lines of:
 {{{
 36) Tests_XMLRPC_wp_newPost::test_no_content
 json_decode(): Passing null to parameter #1 ($json) of type string is
 deprecated

 /var/www/src/wp-includes/kses.php:2074
 /var/www/src/wp-includes/class-wp-hook.php:307
 /var/www/src/wp-includes/plugin.php:205
 /var/www/src/wp-includes/post.php:2835
 /var/www/src/wp-includes/post.php:2720
 /var/www/src/wp-includes/post.php:4066
 /var/www/src/wp-includes/class-wp-xmlrpc-server.php:1683
 /var/www/src/wp-includes/class-wp-xmlrpc-server.php:1347
 /var/www/tests/phpunit/tests/xmlrpc/wp/newPost.php:25
 /var/www/vendor/bin/phpunit:123
 }}}

 Follow-up to [1563], [4793], [7900], [16824], [19848], [19873], [20632],
 [40677], [51968], [54320].

 Props jrf.
 See #55656.
 }}}

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/55656#comment:42>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list