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. Built from https://develop.svn.wordpress.org/trunk@54321 git-svn-id: http://core.svn.wordpress.org/trunk@53880 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
6746d64fd4
commit
ce8fb38739
|
@ -1412,19 +1412,19 @@ class wp_xmlrpc_server extends IXR_Server {
|
|||
$defaults = array(
|
||||
'post_status' => 'draft',
|
||||
'post_type' => 'post',
|
||||
'post_author' => null,
|
||||
'post_password' => null,
|
||||
'post_excerpt' => null,
|
||||
'post_content' => null,
|
||||
'post_title' => null,
|
||||
'post_date' => null,
|
||||
'post_date_gmt' => null,
|
||||
'post_author' => 0,
|
||||
'post_password' => '',
|
||||
'post_excerpt' => '',
|
||||
'post_content' => '',
|
||||
'post_title' => '',
|
||||
'post_date' => '',
|
||||
'post_date_gmt' => '',
|
||||
'post_format' => null,
|
||||
'post_name' => null,
|
||||
'post_thumbnail' => null,
|
||||
'post_parent' => null,
|
||||
'ping_status' => null,
|
||||
'comment_status' => null,
|
||||
'post_parent' => 0,
|
||||
'ping_status' => '',
|
||||
'comment_status' => '',
|
||||
'custom_fields' => null,
|
||||
'terms_names' => null,
|
||||
'terms' => null,
|
||||
|
@ -1499,11 +1499,11 @@ class wp_xmlrpc_server extends IXR_Server {
|
|||
$post_data['post_author'] = $user->ID;
|
||||
}
|
||||
|
||||
if ( isset( $post_data['comment_status'] ) && 'open' !== $post_data['comment_status'] && 'closed' !== $post_data['comment_status'] ) {
|
||||
if ( 'open' !== $post_data['comment_status'] && 'closed' !== $post_data['comment_status'] ) {
|
||||
unset( $post_data['comment_status'] );
|
||||
}
|
||||
|
||||
if ( isset( $post_data['ping_status'] ) && 'open' !== $post_data['ping_status'] && 'closed' !== $post_data['ping_status'] ) {
|
||||
if ( 'open' !== $post_data['ping_status'] && 'closed' !== $post_data['ping_status'] ) {
|
||||
unset( $post_data['ping_status'] );
|
||||
}
|
||||
|
||||
|
@ -1681,6 +1681,14 @@ class wp_xmlrpc_server extends IXR_Server {
|
|||
*/
|
||||
$post_data = apply_filters( 'xmlrpc_wp_insert_post_data', $post_data, $content_struct );
|
||||
|
||||
// Remove all null values to allow for using the insert/update post default values for those keys instead.
|
||||
$post_data = array_filter(
|
||||
$post_data,
|
||||
static function ( $value ) {
|
||||
return null !== $value;
|
||||
}
|
||||
);
|
||||
|
||||
$post_ID = $update ? wp_update_post( $post_data, true ) : wp_insert_post( $post_data, true );
|
||||
if ( is_wp_error( $post_ID ) ) {
|
||||
return new IXR_Error( 500, $post_ID->get_error_message() );
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
*
|
||||
* @global string $wp_version
|
||||
*/
|
||||
$wp_version = '6.1-beta1-54320';
|
||||
$wp_version = '6.1-beta1-54321';
|
||||
|
||||
/**
|
||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||
|
|
Loading…
Reference in New Issue